From 6838a34f8f45ed1021f53d9c9bb8f469b1979d73 Mon Sep 17 00:00:00 2001 From: bitpredator <67551273+bitpredator@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:46:31 +0100 Subject: [PATCH] chore: removed support for npwd_crypto --- .github/CHANGELOG.md | 3 +- .../resources/[esx]/es_extended/config.lua | 64 +- .../resources/[phone]/npwd/config.json | 2 +- .../resources/[phone]/npwd_crypto/LICENSE | 674 - .../resources/[phone]/npwd_crypto/README.md | 81 - .../resources/[phone]/npwd_crypto/config.json | 15 - .../[phone]/npwd_crypto/dist/client.js | 213 - .../[phone]/npwd_crypto/dist/server.js | 12588 ---------------- .../[phone]/npwd_crypto/dist/server.js.map | 7 - .../[phone]/npwd_crypto/fxmanifest.lua | 12 - .../resources/[phone]/npwd_crypto/import.sql | 12 - .../[phone]/npwd_crypto/web/dist/208.js | 2 - .../[phone]/npwd_crypto/web/dist/250.js | 2 - .../[phone]/npwd_crypto/web/dist/294.js | 3 - .../npwd_crypto/web/dist/294.js.LICENSE.txt | 14 - .../[phone]/npwd_crypto/web/dist/376.js | 2 - .../[phone]/npwd_crypto/web/dist/387.js | 2 - .../[phone]/npwd_crypto/web/dist/458.js | 2 - .../[phone]/npwd_crypto/web/dist/464.js | 2 - .../[phone]/npwd_crypto/web/dist/48.js | 2 - .../[phone]/npwd_crypto/web/dist/512.js | 3 - .../npwd_crypto/web/dist/512.js.LICENSE.txt | 13 - .../[phone]/npwd_crypto/web/dist/524.js | 3 - .../npwd_crypto/web/dist/524.js.LICENSE.txt | 8 - .../[phone]/npwd_crypto/web/dist/563.js | 2 - .../[phone]/npwd_crypto/web/dist/576.js | 3 - .../npwd_crypto/web/dist/576.js.LICENSE.txt | 8 - .../dist/66f64c391dee18935eaf916ddec0102c.png | Bin 43042 -> 0 bytes .../[phone]/npwd_crypto/web/dist/706.js | 2 - .../[phone]/npwd_crypto/web/dist/79.js | 76 - .../npwd_crypto/web/dist/79.js.LICENSE.txt | 29 - .../[phone]/npwd_crypto/web/dist/799.js | 2 - .../[phone]/npwd_crypto/web/dist/803.js | 2 - .../[phone]/npwd_crypto/web/dist/804.js | 2 - .../[phone]/npwd_crypto/web/dist/935.js | 3 - .../npwd_crypto/web/dist/935.js.LICENSE.txt | 23 - .../[phone]/npwd_crypto/web/dist/index.html | 7 - .../[phone]/npwd_crypto/web/dist/main.js | 2 - .../npwd_crypto/web/dist/remoteEntry.js | 2 - 39 files changed, 33 insertions(+), 13859 deletions(-) delete mode 100644 server-data/resources/[phone]/npwd_crypto/LICENSE delete mode 100644 server-data/resources/[phone]/npwd_crypto/README.md delete mode 100644 server-data/resources/[phone]/npwd_crypto/config.json delete mode 100644 server-data/resources/[phone]/npwd_crypto/dist/client.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/dist/server.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/dist/server.js.map delete mode 100644 server-data/resources/[phone]/npwd_crypto/fxmanifest.lua delete mode 100644 server-data/resources/[phone]/npwd_crypto/import.sql delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/208.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/250.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/294.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/294.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/376.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/387.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/458.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/464.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/48.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/512.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/512.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/524.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/524.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/563.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/576.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/576.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/66f64c391dee18935eaf916ddec0102c.png delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/706.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/79.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/79.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/799.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/803.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/804.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/935.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/935.js.LICENSE.txt delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/index.html delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/main.js delete mode 100644 server-data/resources/[phone]/npwd_crypto/web/dist/remoteEntry.js diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 615fe7ef8..1457a6a22 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -28,4 +28,5 @@ [client/init/main.lua]: fix(radio): fix oversight with function call [workflows/dependency-review.yml]: chore(deps): bump actions/checkout from 3 to 4 [voice-ui/pnpm-lock.yaml]: chore(deps-dev): bump follow-redirects in /voice-ui - [voice-ui/pnpm-lock.yaml]: chore(deps-dev): bump browserify-sign from 4.2.1 to 4.2.2 in /voice-ui \ No newline at end of file + [voice-ui/pnpm-lock.yaml]: chore(deps-dev): bump browserify-sign from 4.2.1 to 4.2.2 in /voice-ui +7. [npwd + es_extended]: chore: removed support for npwd_crypto @bitpredator \ No newline at end of file diff --git a/server-data/resources/[esx]/es_extended/config.lua b/server-data/resources/[esx]/es_extended/config.lua index 8d92b5dc6..f20f7bc7f 100644 --- a/server-data/resources/[esx]/es_extended/config.lua +++ b/server-data/resources/[esx]/es_extended/config.lua @@ -14,19 +14,15 @@ Config.Accounts = { label = _U('account_money'), round = true }, - crypto = { - label = _('crypto_currency'), - round = false - } } -Config.StartingAccountMoney = {bank = 50000} -Config.EnableSocietyPayouts = true -- pay from the society account that the player is employed at? Requirement: esx_society -Config.MaxWeight = 24 -- the max inventory weight without backpack -Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds -Config.EnableDebug = false -- Use Debug options? -Config.EnableWantedLevel = false -- Use Normal GTA wanted Level? -Config.EnablePVP = true -- Allow Player to player combat +Config.StartingAccountMoney = {bank = 50000} +Config.EnableSocietyPayouts = true -- pay from the society account that the player is employed at? Requirement: esx_society +Config.MaxWeight = 24 -- the max inventory weight without backpack +Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds +Config.EnableDebug = false -- Use Debug options? +Config.EnableWantedLevel = false -- Use Normal GTA wanted Level? +Config.EnablePVP = true -- Allow Player to player combat Config.Multichar = true -- Enable support for esx_multicharacter Config.Identity = true -- Select a characters identity data before they have loaded in (this happens by default with multichar) Config.DistanceGive = 4.0 -- Max distance when giving items, weapons etc. @@ -35,30 +31,30 @@ Config.DisableVehicleRewards = false -- Disables Player Recieving weapons f Config.DisableNPCDrops = true -- stops NPCs from dropping weapons on death Config.DisableWeaponWheel = false -- Disables default weapon wheel Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers) -Config.DisableDisplayAmmo = false -- Disable ammunition display +Config.DisableDisplayAmmo = false -- Disable ammunition display Config.RemoveHudComponents = { - [1] = false, --WANTED_STARS, - [2] = false, --WEAPON_ICON - [3] = false, --CASH - [4] = false, --MP_CASH - [5] = false, --MP_MESSAGE - [6] = false, --VEHICLE_NAME - [7] = false,-- AREA_NAME - [8] = false,-- VEHICLE_CLASS - [9] = false, --STREET_NAME - [10] = false, --HELP_TEXT - [11] = false, --FLOATING_HELP_TEXT_1 - [12] = false, --FLOATING_HELP_TEXT_2 - [13] = false, --CASH_CHANGE - [14] = false, --RETICLE - [15] = false, --SUBTITLE_TEXT - [16] = false, --RADIO_STATIONS - [17] = false, --SAVING_GAME, - [18] = false, --GAME_STREAM - [19] = false, --WEAPON_WHEEL - [20] = false, --WEAPON_WHEEL_STATS - [21] = false, --HUD_COMPONENTS - [22] = false, --HUD_WEAPONS + [1] = false, -- WANTED_STARS, + [2] = false, -- WEAPON_ICON + [3] = false, -- CASH + [4] = false, -- MP_CASH + [5] = false, -- MP_MESSAGE + [6] = false, -- VEHICLE_NAME + [7] = false, -- AREA_NAME + [8] = false, -- VEHICLE_CLASS + [9] = false, -- STREET_NAME + [10] = false, -- HELP_TEXT + [11] = false, -- FLOATING_HELP_TEXT_1 + [12] = false, -- FLOATING_HELP_TEXT_2 + [13] = false, -- CASH_CHANGE + [14] = false, -- RETICLE + [15] = false, -- SUBTITLE_TEXT + [16] = false, -- RADIO_STATIONS + [17] = false, -- SAVING_GAME, + [18] = false, -- GAME_STREAM + [19] = false, -- WEAPON_WHEEL + [20] = false, -- WEAPON_WHEEL_STATS + [21] = false, -- HUD_COMPONENTS + [22] = false, -- HUD_WEAPONS } Config.MaxAdminVehicles = true -- admin vehicles spawn with max vehcle settings diff --git a/server-data/resources/[phone]/npwd/config.json b/server-data/resources/[phone]/npwd/config.json index fb6cd2380..9ed9ef2c5 100644 --- a/server-data/resources/[phone]/npwd/config.json +++ b/server-data/resources/[phone]/npwd/config.json @@ -38,7 +38,7 @@ "useWebhook": true }, "apps": [ - "npwd_services","npwd_crypto" + "npwd_services" ], "voiceMessage": { "enabled": false, diff --git a/server-data/resources/[phone]/npwd_crypto/LICENSE b/server-data/resources/[phone]/npwd_crypto/LICENSE deleted file mode 100644 index e72bfddab..000000000 --- a/server-data/resources/[phone]/npwd_crypto/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/README.md b/server-data/resources/[phone]/npwd_crypto/README.md deleted file mode 100644 index 92711f524..000000000 --- a/server-data/resources/[phone]/npwd_crypto/README.md +++ /dev/null @@ -1,81 +0,0 @@ -
- Material-UI logo -
-

NPWD Crypto

- -
-External NPWD app for buying, selling and trading crypto currency. -
- -
- -[![license](https://img.shields.io/github/license/npwd-community/npwd_crypto?style=for-the-badge)](https://github.com/mojito-fivem/npwd-dispatch/master/LICENSE) -![GitHub all releases](https://img.shields.io/github/downloads/npwd-community/npwd_crypto/total?style=for-the-badge) -
- -## Screenshots -![Portfolio Page](https://i.imgur.com/2VF9Lw7.png) -![History Page](https://i.imgur.com/eSSIkAH.png) -![Transaction Page](https://i.imgur.com/VjUrZbH.png) - -## Setup and Configuration - -Framework is automatically detected for ESX and QBCore - -### Installation -- Download the [latest from the release](https://github.com/npwd-community/npwd_crypto/releases/latest) or build from source. - -* Download the npwd_crypto.zip from releases. DO NOT CHANGE THE RESOURCE NAME. -* Unzip and add the resource to your server resources folder -* Ensure npwd_crytpo BEFORE npwd -* Add the app to NPWD config.json in the apps section `"apps": ["npwd_crypto"]` - -**ESX ONLY** -- Use Latest ESX legacy as of commit [c00ff2365820c6edb4146e0c357fc3ea5247b304](https://github.com/esx-framework/esx-legacy/commit/c00ff2365820c6edb4146e0c357fc3ea5247b304) -- Add crypto as to Config.Accounts in esx_extended/config.lua: -```lua -Config.Accounts = { - bank = { - label = _U('account_bank'), - round = true - }, - black_money = { - label = _U('account_black_money'), - round = true - }, - money = { - label = _U('account_money'), - round = true - }, - crypto = { - label = "Crypto Currency", - round = false - } -} -``` - -### Config - -```js -{ - "maxHistory": 10, // Maximum number of data points to store in history - "logging": { - "enabled": false, // Enables discord webhook logging of crypto price updates - "webhook": "" // Discord webhook link - }, - "tick": { - "min": 15, // Minimum value the crypto can take - "max": 250, // Maximum value - "upDownRatio": 0.6, // [1.0-0.0] chance for crypto to go up - "maxDeviation": 10, // Maximum amount the price can go up or down - "interval": 15, // Time in minutes for each price change - "crashChance": 0.05 // Chance% for price to reset to minimum - } -} -``` - -## Development - -If you wish to make changes or build yourself you can clone the repository with `git clone https://github.com/npwd-community/npwd_crypto.git` then install the dependencies with `yarn build` or `npm i`. - -You can either build the project with `yarn build` or alternatively, you can use `yarn watch` to put webpack in watch mode so that it will automatically rebuild after any changes you make. diff --git a/server-data/resources/[phone]/npwd_crypto/config.json b/server-data/resources/[phone]/npwd_crypto/config.json deleted file mode 100644 index 109ff6b39..000000000 --- a/server-data/resources/[phone]/npwd_crypto/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "maxHistory": 10, - "logging": { - "enabled": false, - "webhook": "" - }, - "tick": { - "min": 15, - "max": 250, - "upDownRatio": 0.6, - "maxDeviation": 10, - "interval": 15, - "crashChance": 0.05 - } -} \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/dist/client.js b/server-data/resources/[phone]/npwd_crypto/dist/client.js deleted file mode 100644 index d43199d5c..000000000 --- a/server-data/resources/[phone]/npwd_crypto/dist/client.js +++ /dev/null @@ -1,213 +0,0 @@ -(() => { - var __defProp = Object.defineProperty; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; - }; - var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); - }; - - // node_modules/@project-error/pe-utils/lib/client/functions.js - var RegisterNuiCB; - var init_functions = __esm({ - "node_modules/@project-error/pe-utils/lib/client/functions.js"() { - RegisterNuiCB = (event, callback) => { - RegisterNuiCallbackType(event); - on(`__cfx_nui:${event}`, callback); - }; - } - }); - - // node_modules/@project-error/pe-utils/lib/common/helpers.js - function PrefixedUUID(iterator) { - return `${iterator.toString(36)}-${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(36)}`; - } - var init_helpers = __esm({ - "node_modules/@project-error/pe-utils/lib/common/helpers.js"() { - } - }); - - // node_modules/@project-error/pe-utils/lib/client/cl_utils.js - var ClientUtils; - var init_cl_utils = __esm({ - "node_modules/@project-error/pe-utils/lib/client/cl_utils.js"() { - init_helpers(); - ClientUtils = class { - constructor(settings) { - this.uidCounter = 0; - this._settings = { - promiseTimeout: 15e3, - debugMode: false - }; - this.setSettings(settings); - } - debugLog(...args) { - if (!this._settings.debugMode) - return; - console.log(`^1[ClUtils]^0`, ...args); - } - setSettings(settings) { - this._settings = Object.assign(Object.assign({}, this._settings), settings); - } - emitNetPromise(eventName, data) { - return new Promise((resolve, reject) => { - let hasTimedOut = false; - setTimeout(() => { - hasTimedOut = true; - reject(`${eventName} has timed out after ${this._settings.promiseTimeout} ms`); - }, this._settings.promiseTimeout); - const uniqId = PrefixedUUID(this.uidCounter++); - const listenEventName = `${eventName}:${uniqId}`; - emitNet(eventName, listenEventName, data); - const handleListenEvent = (data2) => { - removeEventListener(listenEventName, handleListenEvent); - if (hasTimedOut) - return; - resolve(data2); - }; - onNet(listenEventName, handleListenEvent); - }); - } - registerNuiProxy(event) { - RegisterNuiCallbackType(event); - on(`__cfx_nui:${event}`, async (data, cb) => { - this.debugLog(`NUICallback processed: ${event}`); - this.debugLog(`NUI CB Data:`, data); - try { - const res = await this.emitNetPromise(event, data); - cb(res); - } catch (e) { - console.error("Error encountered while listening to resp. Error:", e); - cb({ err: e }); - } - }); - } - registerRPCListener(eventName, cb) { - onNet(eventName, (listenEventName, data) => { - this.debugLog(`RPC called: ${eventName}`); - Promise.resolve(cb(data)).then((retData) => { - this.debugLog(`RPC Data:`, data); - emitNet(listenEventName, retData); - }).catch((e) => { - console.error(`RPC Error in ${eventName}, ERR: ${e.message}`); - }); - }); - } - }; - } - }); - - // node_modules/@project-error/pe-utils/lib/client/types.js - var init_types = __esm({ - "node_modules/@project-error/pe-utils/lib/client/types.js"() { - } - }); - - // node_modules/@project-error/pe-utils/lib/client/index.js - var init_client = __esm({ - "node_modules/@project-error/pe-utils/lib/client/index.js"() { - init_functions(); - init_cl_utils(); - init_types(); - } - }); - - // node_modules/@project-error/pe-utils/lib/server/sv_utils.js - var init_sv_utils = __esm({ - "node_modules/@project-error/pe-utils/lib/server/sv_utils.js"() { - init_helpers(); - } - }); - - // node_modules/@project-error/pe-utils/lib/server/types.js - var init_types2 = __esm({ - "node_modules/@project-error/pe-utils/lib/server/types.js"() { - } - }); - - // node_modules/@project-error/pe-utils/lib/server/index.js - var init_server = __esm({ - "node_modules/@project-error/pe-utils/lib/server/index.js"() { - init_sv_utils(); - init_types2(); - } - }); - - // node_modules/@project-error/pe-utils/lib/index.js - var init_lib = __esm({ - "node_modules/@project-error/pe-utils/lib/index.js"() { - init_client(); - init_server(); - init_helpers(); - } - }); - - // client/client.ts - var require_client = __commonJS({ - "client/client.ts"(exports) { - init_lib(); - var Utils = new ClientUtils(); - RegisterNuiCB("npwd_crypto:fetchData", (data, cb) => __async(exports, null, function* () { - const resp = yield Utils.emitNetPromise("npwd_crypto:fetchCryptoData", {}); - if (resp.status === "ok") { - cb(__spreadValues({}, resp.data)); - } - })); - RegisterNuiCB("npwd_crypto:fetchTransactions", (data, cb) => __async(exports, null, function* () { - const resp = yield Utils.emitNetPromise("npwd_crypto:fetchTransactionData", {}); - if (resp.status === "ok") { - cb(resp.data); - } - })); - RegisterNuiCB("npwd_crypto:tryBuyCrypto", (data, cb) => __async(exports, null, function* () { - const resp = yield Utils.emitNetPromise("npwd_crypto:buyCrypto", data); - cb(resp); - })); - RegisterNuiCB("npwd_crypto:trySellCrypto", (data, cb) => __async(exports, null, function* () { - const resp = yield Utils.emitNetPromise("npwd_crypto:sellCrypto", data); - cb(resp); - })); - RegisterNuiCB("npwd_crypto:tryTradeCrypto", (data, cb) => __async(exports, null, function* () { - const resp = yield Utils.emitNetPromise("npwd_crypto:tradeCrypto", data); - cb(resp); - })); - } - }); - require_client(); -})(); diff --git a/server-data/resources/[phone]/npwd_crypto/dist/server.js b/server-data/resources/[phone]/npwd_crypto/dist/server.js deleted file mode 100644 index b9583d37e..000000000 --- a/server-data/resources/[phone]/npwd_crypto/dist/server.js +++ /dev/null @@ -1,12588 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __reExport = (target, module2, copyDefault, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key of __getOwnPropNames(module2)) - if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default")) - __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); - } - return target; -}; -var __toESM = (module2, isNodeMode) => { - return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); -}; -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; - -// node_modules/axios/lib/helpers/bind.js -var require_bind = __commonJS({ - "node_modules/axios/lib/helpers/bind.js"(exports2, module2) { - "use strict"; - module2.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; - }; - } -}); - -// node_modules/axios/lib/utils.js -var require_utils = __commonJS({ - "node_modules/axios/lib/utils.js"(exports2, module2) { - "use strict"; - var bind = require_bind(); - var toString = Object.prototype.toString; - var kindOf = function(cache) { - return function(thing) { - var str = toString.call(thing); - return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); - }; - }(/* @__PURE__ */ Object.create(null)); - function kindOfTest(type) { - type = type.toLowerCase(); - return function isKindOf(thing) { - return kindOf(thing) === type; - }; - } - function isArray(val) { - return Array.isArray(val); - } - function isUndefined(val) { - return typeof val === "undefined"; - } - function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val); - } - var isArrayBuffer = kindOfTest("ArrayBuffer"); - function isArrayBufferView(val) { - var result; - if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { - result = ArrayBuffer.isView(val); - } else { - result = val && val.buffer && isArrayBuffer(val.buffer); - } - return result; - } - function isString(val) { - return typeof val === "string"; - } - function isNumber(val) { - return typeof val === "number"; - } - function isObject(val) { - return val !== null && typeof val === "object"; - } - function isPlainObject(val) { - if (kindOf(val) !== "object") { - return false; - } - var prototype = Object.getPrototypeOf(val); - return prototype === null || prototype === Object.prototype; - } - var isDate = kindOfTest("Date"); - var isFile = kindOfTest("File"); - var isBlob = kindOfTest("Blob"); - var isFileList = kindOfTest("FileList"); - function isFunction(val) { - return toString.call(val) === "[object Function]"; - } - function isStream(val) { - return isObject(val) && isFunction(val.pipe); - } - function isFormData(thing) { - var pattern = "[object FormData]"; - return thing && (typeof FormData === "function" && thing instanceof FormData || toString.call(thing) === pattern || isFunction(thing.toString) && thing.toString() === pattern); - } - var isURLSearchParams = kindOfTest("URLSearchParams"); - function trim(str) { - return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ""); - } - function isStandardBrowserEnv() { - if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) { - return false; - } - return typeof window !== "undefined" && typeof document !== "undefined"; - } - function forEach(obj, fn) { - if (obj === null || typeof obj === "undefined") { - return; - } - if (typeof obj !== "object") { - obj = [obj]; - } - if (isArray(obj)) { - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - fn.call(null, obj[key], key, obj); - } - } - } - } - function merge() { - var result = {}; - function assignValue(val, key) { - if (isPlainObject(result[key]) && isPlainObject(val)) { - result[key] = merge(result[key], val); - } else if (isPlainObject(val)) { - result[key] = merge({}, val); - } else if (isArray(val)) { - result[key] = val.slice(); - } else { - result[key] = val; - } - } - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; - } - function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === "function") { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; - } - function stripBOM(content) { - if (content.charCodeAt(0) === 65279) { - content = content.slice(1); - } - return content; - } - function inherits(constructor, superConstructor, props, descriptors) { - constructor.prototype = Object.create(superConstructor.prototype, descriptors); - constructor.prototype.constructor = constructor; - props && Object.assign(constructor.prototype, props); - } - function toFlatObject(sourceObj, destObj, filter) { - var props; - var i; - var prop; - var merged = {}; - destObj = destObj || {}; - do { - props = Object.getOwnPropertyNames(sourceObj); - i = props.length; - while (i-- > 0) { - prop = props[i]; - if (!merged[prop]) { - destObj[prop] = sourceObj[prop]; - merged[prop] = true; - } - } - sourceObj = Object.getPrototypeOf(sourceObj); - } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); - return destObj; - } - function endsWith(str, searchString, position) { - str = String(str); - if (position === void 0 || position > str.length) { - position = str.length; - } - position -= searchString.length; - var lastIndex = str.indexOf(searchString, position); - return lastIndex !== -1 && lastIndex === position; - } - function toArray(thing) { - if (!thing) - return null; - var i = thing.length; - if (isUndefined(i)) - return null; - var arr = new Array(i); - while (i-- > 0) { - arr[i] = thing[i]; - } - return arr; - } - var isTypedArray = function(TypedArray) { - return function(thing) { - return TypedArray && thing instanceof TypedArray; - }; - }(typeof Uint8Array !== "undefined" && Object.getPrototypeOf(Uint8Array)); - module2.exports = { - isArray, - isArrayBuffer, - isBuffer, - isFormData, - isArrayBufferView, - isString, - isNumber, - isObject, - isPlainObject, - isUndefined, - isDate, - isFile, - isBlob, - isFunction, - isStream, - isURLSearchParams, - isStandardBrowserEnv, - forEach, - merge, - extend, - trim, - stripBOM, - inherits, - toFlatObject, - kindOf, - kindOfTest, - endsWith, - toArray, - isTypedArray, - isFileList - }; - } -}); - -// node_modules/axios/lib/helpers/buildURL.js -var require_buildURL = __commonJS({ - "node_modules/axios/lib/helpers/buildURL.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - function encode(val) { - return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]"); - } - module2.exports = function buildURL(url, params, paramsSerializer) { - if (!params) { - return url; - } - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === "undefined") { - return; - } - if (utils.isArray(val)) { - key = key + "[]"; - } else { - val = [val]; - } - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + "=" + encode(v)); - }); - }); - serializedParams = parts.join("&"); - } - if (serializedParams) { - var hashmarkIndex = url.indexOf("#"); - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams; - } - return url; - }; - } -}); - -// node_modules/axios/lib/core/InterceptorManager.js -var require_InterceptorManager = __commonJS({ - "node_modules/axios/lib/core/InterceptorManager.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - function InterceptorManager() { - this.handlers = []; - } - InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled, - rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; - }; - InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } - }; - InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); - }; - module2.exports = InterceptorManager; - } -}); - -// node_modules/axios/lib/helpers/normalizeHeaderName.js -var require_normalizeHeaderName = __commonJS({ - "node_modules/axios/lib/helpers/normalizeHeaderName.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - module2.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); - }; - } -}); - -// node_modules/axios/lib/core/AxiosError.js -var require_AxiosError = __commonJS({ - "node_modules/axios/lib/core/AxiosError.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - function AxiosError(message, code, config, request, response) { - Error.call(this); - this.message = message; - this.name = "AxiosError"; - code && (this.code = code); - config && (this.config = config); - request && (this.request = request); - response && (this.response = response); - } - utils.inherits(AxiosError, Error, { - toJSON: function toJSON() { - return { - message: this.message, - name: this.name, - description: this.description, - number: this.number, - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - config: this.config, - code: this.code, - status: this.response && this.response.status ? this.response.status : null - }; - } - }); - var prototype = AxiosError.prototype; - var descriptors = {}; - [ - "ERR_BAD_OPTION_VALUE", - "ERR_BAD_OPTION", - "ECONNABORTED", - "ETIMEDOUT", - "ERR_NETWORK", - "ERR_FR_TOO_MANY_REDIRECTS", - "ERR_DEPRECATED", - "ERR_BAD_RESPONSE", - "ERR_BAD_REQUEST", - "ERR_CANCELED" - ].forEach(function(code) { - descriptors[code] = { value: code }; - }); - Object.defineProperties(AxiosError, descriptors); - Object.defineProperty(prototype, "isAxiosError", { value: true }); - AxiosError.from = function(error, code, config, request, response, customProps) { - var axiosError = Object.create(prototype); - utils.toFlatObject(error, axiosError, function filter(obj) { - return obj !== Error.prototype; - }); - AxiosError.call(axiosError, error.message, code, config, request, response); - axiosError.name = error.name; - customProps && Object.assign(axiosError, customProps); - return axiosError; - }; - module2.exports = AxiosError; - } -}); - -// node_modules/axios/lib/defaults/transitional.js -var require_transitional = __commonJS({ - "node_modules/axios/lib/defaults/transitional.js"(exports2, module2) { - "use strict"; - module2.exports = { - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false - }; - } -}); - -// node_modules/axios/lib/helpers/toFormData.js -var require_toFormData = __commonJS({ - "node_modules/axios/lib/helpers/toFormData.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - function toFormData(obj, formData) { - formData = formData || new FormData(); - var stack = []; - function convertValue(value) { - if (value === null) - return ""; - if (utils.isDate(value)) { - return value.toISOString(); - } - if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { - return typeof Blob === "function" ? new Blob([value]) : Buffer.from(value); - } - return value; - } - function build(data, parentKey) { - if (utils.isPlainObject(data) || utils.isArray(data)) { - if (stack.indexOf(data) !== -1) { - throw Error("Circular reference detected in " + parentKey); - } - stack.push(data); - utils.forEach(data, function each(value, key) { - if (utils.isUndefined(value)) - return; - var fullKey = parentKey ? parentKey + "." + key : key; - var arr; - if (value && !parentKey && typeof value === "object") { - if (utils.endsWith(key, "{}")) { - value = JSON.stringify(value); - } else if (utils.endsWith(key, "[]") && (arr = utils.toArray(value))) { - arr.forEach(function(el) { - !utils.isUndefined(el) && formData.append(fullKey, convertValue(el)); - }); - return; - } - } - build(value, fullKey); - }); - stack.pop(); - } else { - formData.append(parentKey, convertValue(data)); - } - } - build(obj); - return formData; - } - module2.exports = toFormData; - } -}); - -// node_modules/axios/lib/core/settle.js -var require_settle = __commonJS({ - "node_modules/axios/lib/core/settle.js"(exports2, module2) { - "use strict"; - var AxiosError = require_AxiosError(); - module2.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(new AxiosError("Request failed with status code " + response.status, [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response)); - } - }; - } -}); - -// node_modules/axios/lib/helpers/cookies.js -var require_cookies = __commonJS({ - "node_modules/axios/lib/helpers/cookies.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - module2.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + "=" + encodeURIComponent(value)); - if (utils.isNumber(expires)) { - cookie.push("expires=" + new Date(expires).toGMTString()); - } - if (utils.isString(path)) { - cookie.push("path=" + path); - } - if (utils.isString(domain)) { - cookie.push("domain=" + domain); - } - if (secure === true) { - cookie.push("secure"); - } - document.cookie = cookie.join("; "); - }, - read: function read(name) { - var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)")); - return match ? decodeURIComponent(match[3]) : null; - }, - remove: function remove(name) { - this.write(name, "", Date.now() - 864e5); - } - }; - }() : function nonStandardBrowserEnv() { - return { - write: function write() { - }, - read: function read() { - return null; - }, - remove: function remove() { - } - }; - }(); - } -}); - -// node_modules/axios/lib/helpers/isAbsoluteURL.js -var require_isAbsoluteURL = __commonJS({ - "node_modules/axios/lib/helpers/isAbsoluteURL.js"(exports2, module2) { - "use strict"; - module2.exports = function isAbsoluteURL(url) { - return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); - }; - } -}); - -// node_modules/axios/lib/helpers/combineURLs.js -var require_combineURLs = __commonJS({ - "node_modules/axios/lib/helpers/combineURLs.js"(exports2, module2) { - "use strict"; - module2.exports = function combineURLs(baseURL, relativeURL) { - return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL; - }; - } -}); - -// node_modules/axios/lib/core/buildFullPath.js -var require_buildFullPath = __commonJS({ - "node_modules/axios/lib/core/buildFullPath.js"(exports2, module2) { - "use strict"; - var isAbsoluteURL = require_isAbsoluteURL(); - var combineURLs = require_combineURLs(); - module2.exports = function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; - }; - } -}); - -// node_modules/axios/lib/helpers/parseHeaders.js -var require_parseHeaders = __commonJS({ - "node_modules/axios/lib/helpers/parseHeaders.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var ignoreDuplicateOf = [ - "age", - "authorization", - "content-length", - "content-type", - "etag", - "expires", - "from", - "host", - "if-modified-since", - "if-unmodified-since", - "last-modified", - "location", - "max-forwards", - "proxy-authorization", - "referer", - "retry-after", - "user-agent" - ]; - module2.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - if (!headers) { - return parsed; - } - utils.forEach(headers.split("\n"), function parser(line) { - i = line.indexOf(":"); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - if (key) { - if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { - return; - } - if (key === "set-cookie") { - parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); - } else { - parsed[key] = parsed[key] ? parsed[key] + ", " + val : val; - } - } - }); - return parsed; - }; - } -}); - -// node_modules/axios/lib/helpers/isURLSameOrigin.js -var require_isURLSameOrigin = __commonJS({ - "node_modules/axios/lib/helpers/isURLSameOrigin.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - module2.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement("a"); - var originURL; - function resolveURL(url) { - var href = url; - if (msie) { - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - urlParsingNode.setAttribute("href", href); - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "", - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "", - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "", - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname - }; - } - originURL = resolveURL(window.location.href); - return function isURLSameOrigin(requestURL) { - var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL; - return parsed.protocol === originURL.protocol && parsed.host === originURL.host; - }; - }() : function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - }(); - } -}); - -// node_modules/axios/lib/cancel/CanceledError.js -var require_CanceledError = __commonJS({ - "node_modules/axios/lib/cancel/CanceledError.js"(exports2, module2) { - "use strict"; - var AxiosError = require_AxiosError(); - var utils = require_utils(); - function CanceledError(message) { - AxiosError.call(this, message == null ? "canceled" : message, AxiosError.ERR_CANCELED); - this.name = "CanceledError"; - } - utils.inherits(CanceledError, AxiosError, { - __CANCEL__: true - }); - module2.exports = CanceledError; - } -}); - -// node_modules/axios/lib/helpers/parseProtocol.js -var require_parseProtocol = __commonJS({ - "node_modules/axios/lib/helpers/parseProtocol.js"(exports2, module2) { - "use strict"; - module2.exports = function parseProtocol(url) { - var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); - return match && match[1] || ""; - }; - } -}); - -// node_modules/axios/lib/adapters/xhr.js -var require_xhr = __commonJS({ - "node_modules/axios/lib/adapters/xhr.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var settle = require_settle(); - var cookies = require_cookies(); - var buildURL = require_buildURL(); - var buildFullPath = require_buildFullPath(); - var parseHeaders = require_parseHeaders(); - var isURLSameOrigin = require_isURLSameOrigin(); - var transitionalDefaults = require_transitional(); - var AxiosError = require_AxiosError(); - var CanceledError = require_CanceledError(); - var parseProtocol = require_parseProtocol(); - module2.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - var responseType = config.responseType; - var onCanceled; - function done() { - if (config.cancelToken) { - config.cancelToken.unsubscribe(onCanceled); - } - if (config.signal) { - config.signal.removeEventListener("abort", onCanceled); - } - } - if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { - delete requestHeaders["Content-Type"]; - } - var request = new XMLHttpRequest(); - if (config.auth) { - var username = config.auth.username || ""; - var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ""; - requestHeaders.Authorization = "Basic " + btoa(username + ":" + password); - } - var fullPath = buildFullPath(config.baseURL, config.url); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); - request.timeout = config.timeout; - function onloadend() { - if (!request) { - return; - } - var responseHeaders = "getAllResponseHeaders" in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response; - var response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config, - request - }; - settle(function _resolve(value) { - resolve(value); - done(); - }, function _reject(err) { - reject(err); - done(); - }, response); - request = null; - } - if ("onloadend" in request) { - request.onloadend = onloadend; - } else { - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) { - return; - } - setTimeout(onloadend); - }; - } - request.onabort = function handleAbort() { - if (!request) { - return; - } - reject(new AxiosError("Request aborted", AxiosError.ECONNABORTED, config, request)); - request = null; - }; - request.onerror = function handleError() { - reject(new AxiosError("Network Error", AxiosError.ERR_NETWORK, config, request, request)); - request = null; - }; - request.ontimeout = function handleTimeout() { - var timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded"; - var transitional = config.transitional || transitionalDefaults; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - reject(new AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, request)); - request = null; - }; - if (utils.isStandardBrowserEnv()) { - var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : void 0; - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - if ("setRequestHeader" in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") { - delete requestHeaders[key]; - } else { - request.setRequestHeader(key, val); - } - }); - } - if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - } - if (responseType && responseType !== "json") { - request.responseType = config.responseType; - } - if (typeof config.onDownloadProgress === "function") { - request.addEventListener("progress", config.onDownloadProgress); - } - if (typeof config.onUploadProgress === "function" && request.upload) { - request.upload.addEventListener("progress", config.onUploadProgress); - } - if (config.cancelToken || config.signal) { - onCanceled = function(cancel) { - if (!request) { - return; - } - reject(!cancel || cancel && cancel.type ? new CanceledError() : cancel); - request.abort(); - request = null; - }; - config.cancelToken && config.cancelToken.subscribe(onCanceled); - if (config.signal) { - config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled); - } - } - if (!requestData) { - requestData = null; - } - var protocol = parseProtocol(fullPath); - if (protocol && ["http", "https", "file"].indexOf(protocol) === -1) { - reject(new AxiosError("Unsupported protocol " + protocol + ":", AxiosError.ERR_BAD_REQUEST, config)); - return; - } - request.send(requestData); - }); - }; - } -}); - -// node_modules/debug/node_modules/ms/index.js -var require_ms = __commonJS({ - "node_modules/debug/node_modules/ms/index.js"(exports2, module2) { - var s = 1e3; - var m = s * 60; - var h = m * 60; - var d = h * 24; - var y = d * 365.25; - module2.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse(val); - } else if (type === "number" && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); - }; - function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * y; - case "days": - case "day": - case "d": - return n * d; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * h; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * m; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * s; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - default: - return void 0; - } - } - function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + "d"; - } - if (ms >= h) { - return Math.round(ms / h) + "h"; - } - if (ms >= m) { - return Math.round(ms / m) + "m"; - } - if (ms >= s) { - return Math.round(ms / s) + "s"; - } - return ms + "ms"; - } - function fmtLong(ms) { - return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; - } - function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + " " + name; - } - return Math.ceil(ms / n) + " " + name + "s"; - } - } -}); - -// node_modules/debug/src/debug.js -var require_debug = __commonJS({ - "node_modules/debug/src/debug.js"(exports2, module2) { - exports2 = module2.exports = createDebug.debug = createDebug["default"] = createDebug; - exports2.coerce = coerce; - exports2.disable = disable; - exports2.enable = enable; - exports2.enabled = enabled; - exports2.humanize = require_ms(); - exports2.names = []; - exports2.skips = []; - exports2.formatters = {}; - var prevTime; - function selectColor(namespace) { - var hash = 0, i; - for (i in namespace) { - hash = (hash << 5) - hash + namespace.charCodeAt(i); - hash |= 0; - } - return exports2.colors[Math.abs(hash) % exports2.colors.length]; - } - function createDebug(namespace) { - function debug() { - if (!debug.enabled) - return; - var self = debug; - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - args[0] = exports2.coerce(args[0]); - if (typeof args[0] !== "string") { - args.unshift("%O"); - } - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - if (match === "%%") - return match; - index++; - var formatter = exports2.formatters[format]; - if (typeof formatter === "function") { - var val = args[index]; - match = formatter.call(self, val); - args.splice(index, 1); - index--; - } - return match; - }); - exports2.formatArgs.call(self, args); - var logFn = debug.log || exports2.log || console.log.bind(console); - logFn.apply(self, args); - } - debug.namespace = namespace; - debug.enabled = exports2.enabled(namespace); - debug.useColors = exports2.useColors(); - debug.color = selectColor(namespace); - if (typeof exports2.init === "function") { - exports2.init(debug); - } - return debug; - } - function enable(namespaces) { - exports2.save(namespaces); - exports2.names = []; - exports2.skips = []; - var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); - var len = split.length; - for (var i = 0; i < len; i++) { - if (!split[i]) - continue; - namespaces = split[i].replace(/\*/g, ".*?"); - if (namespaces[0] === "-") { - exports2.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); - } else { - exports2.names.push(new RegExp("^" + namespaces + "$")); - } - } - } - function disable() { - exports2.enable(""); - } - function enabled(name) { - var i, len; - for (i = 0, len = exports2.skips.length; i < len; i++) { - if (exports2.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports2.names.length; i < len; i++) { - if (exports2.names[i].test(name)) { - return true; - } - } - return false; - } - function coerce(val) { - if (val instanceof Error) - return val.stack || val.message; - return val; - } - } -}); - -// node_modules/debug/src/browser.js -var require_browser = __commonJS({ - "node_modules/debug/src/browser.js"(exports2, module2) { - exports2 = module2.exports = require_debug(); - exports2.log = log; - exports2.formatArgs = formatArgs; - exports2.save = save; - exports2.load = load; - exports2.useColors = useColors; - exports2.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); - exports2.colors = [ - "lightseagreen", - "forestgreen", - "goldenrod", - "dodgerblue", - "darkorchid", - "crimson" - ]; - function useColors() { - if (typeof window !== "undefined" && window.process && window.process.type === "renderer") { - return true; - } - return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - exports2.formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (err) { - return "[UnexpectedJSONParseError]: " + err.message; - } - }; - function formatArgs(args) { - var useColors2 = this.useColors; - args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports2.humanize(this.diff); - if (!useColors2) - return; - var c = "color: " + this.color; - args.splice(1, 0, c, "color: inherit"); - var index = 0; - var lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, function(match) { - if (match === "%%") - return; - index++; - if (match === "%c") { - lastC = index; - } - }); - args.splice(lastC, 0, c); - } - function log() { - return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); - } - function save(namespaces) { - try { - if (namespaces == null) { - exports2.storage.removeItem("debug"); - } else { - exports2.storage.debug = namespaces; - } - } catch (e) { - } - } - function load() { - var r; - try { - r = exports2.storage.debug; - } catch (e) { - } - if (!r && typeof process !== "undefined" && "env" in process) { - r = process.env.DEBUG; - } - return r; - } - exports2.enable(load()); - function localstorage() { - try { - return window.localStorage; - } catch (e) { - } - } - } -}); - -// node_modules/debug/src/node.js -var require_node = __commonJS({ - "node_modules/debug/src/node.js"(exports2, module2) { - var tty = require("tty"); - var util = require("util"); - exports2 = module2.exports = require_debug(); - exports2.init = init; - exports2.log = log; - exports2.formatArgs = formatArgs; - exports2.save = save; - exports2.load = load; - exports2.useColors = useColors; - exports2.colors = [6, 2, 3, 4, 5, 1]; - exports2.inspectOpts = Object.keys(process.env).filter(function(key) { - return /^debug_/i.test(key); - }).reduce(function(obj, key) { - var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { - return k.toUpperCase(); - }); - var val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) - val = true; - else if (/^(no|off|false|disabled)$/i.test(val)) - val = false; - else if (val === "null") - val = null; - else - val = Number(val); - obj[prop] = val; - return obj; - }, {}); - var fd = parseInt(process.env.DEBUG_FD, 10) || 2; - if (fd !== 1 && fd !== 2) { - util.deprecate(function() { - }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); - } - var stream = fd === 1 ? process.stdout : fd === 2 ? process.stderr : createWritableStdioStream(fd); - function useColors() { - return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(fd); - } - exports2.formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { - return str.trim(); - }).join(" "); - }; - exports2.formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); - }; - function formatArgs(args) { - var name = this.namespace; - var useColors2 = this.useColors; - if (useColors2) { - var c = this.color; - var prefix = " \x1B[3" + c + ";1m" + name + " \x1B[0m"; - args[0] = prefix + args[0].split("\n").join("\n" + prefix); - args.push("\x1B[3" + c + "m+" + exports2.humanize(this.diff) + "\x1B[0m"); - } else { - args[0] = new Date().toUTCString() + " " + name + " " + args[0]; - } - } - function log() { - return stream.write(util.format.apply(util, arguments) + "\n"); - } - function save(namespaces) { - if (namespaces == null) { - delete process.env.DEBUG; - } else { - process.env.DEBUG = namespaces; - } - } - function load() { - return process.env.DEBUG; - } - function createWritableStdioStream(fd2) { - var stream2; - var tty_wrap = process.binding("tty_wrap"); - switch (tty_wrap.guessHandleType(fd2)) { - case "TTY": - stream2 = new tty.WriteStream(fd2); - stream2._type = "tty"; - if (stream2._handle && stream2._handle.unref) { - stream2._handle.unref(); - } - break; - case "FILE": - var fs = require("fs"); - stream2 = new fs.SyncWriteStream(fd2, { autoClose: false }); - stream2._type = "fs"; - break; - case "PIPE": - case "TCP": - var net = require("net"); - stream2 = new net.Socket({ - fd: fd2, - readable: false, - writable: true - }); - stream2.readable = false; - stream2.read = null; - stream2._type = "pipe"; - if (stream2._handle && stream2._handle.unref) { - stream2._handle.unref(); - } - break; - default: - throw new Error("Implement me. Unknown stream file type!"); - } - stream2.fd = fd2; - stream2._isStdio = true; - return stream2; - } - function init(debug) { - debug.inspectOpts = {}; - var keys = Object.keys(exports2.inspectOpts); - for (var i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; - } - } - exports2.enable(load()); - } -}); - -// node_modules/debug/src/index.js -var require_src = __commonJS({ - "node_modules/debug/src/index.js"(exports2, module2) { - if (typeof process !== "undefined" && process.type === "renderer") { - module2.exports = require_browser(); - } else { - module2.exports = require_node(); - } - } -}); - -// node_modules/follow-redirects/debug.js -var require_debug2 = __commonJS({ - "node_modules/follow-redirects/debug.js"(exports2, module2) { - var debug; - module2.exports = function() { - if (!debug) { - try { - debug = require_src()("follow-redirects"); - } catch (error) { - } - if (typeof debug !== "function") { - debug = function() { - }; - } - } - debug.apply(null, arguments); - }; - } -}); - -// node_modules/follow-redirects/index.js -var require_follow_redirects = __commonJS({ - "node_modules/follow-redirects/index.js"(exports2, module2) { - var url = require("url"); - var URL = url.URL; - var http = require("http"); - var https = require("https"); - var Writable = require("stream").Writable; - var assert = require("assert"); - var debug = require_debug2(); - var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; - var eventHandlers = /* @__PURE__ */ Object.create(null); - events.forEach(function(event) { - eventHandlers[event] = function(arg1, arg2, arg3) { - this._redirectable.emit(event, arg1, arg2, arg3); - }; - }); - var RedirectionError = createErrorType("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed"); - var TooManyRedirectsError = createErrorType("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded"); - var MaxBodyLengthExceededError = createErrorType("ERR_FR_MAX_BODY_LENGTH_EXCEEDED", "Request body larger than maxBodyLength limit"); - var WriteAfterEndError = createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end"); - function RedirectableRequest(options, responseCallback) { - Writable.call(this); - this._sanitizeOptions(options); - this._options = options; - this._ended = false; - this._ending = false; - this._redirectCount = 0; - this._redirects = []; - this._requestBodyLength = 0; - this._requestBodyBuffers = []; - if (responseCallback) { - this.on("response", responseCallback); - } - var self = this; - this._onNativeResponse = function(response) { - self._processResponse(response); - }; - this._performRequest(); - } - RedirectableRequest.prototype = Object.create(Writable.prototype); - RedirectableRequest.prototype.abort = function() { - abortRequest(this._currentRequest); - this.emit("abort"); - }; - RedirectableRequest.prototype.write = function(data, encoding, callback) { - if (this._ending) { - throw new WriteAfterEndError(); - } - if (!(typeof data === "string" || typeof data === "object" && "length" in data)) { - throw new TypeError("data should be a string, Buffer or Uint8Array"); - } - if (typeof encoding === "function") { - callback = encoding; - encoding = null; - } - if (data.length === 0) { - if (callback) { - callback(); - } - return; - } - if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { - this._requestBodyLength += data.length; - this._requestBodyBuffers.push({ data, encoding }); - this._currentRequest.write(data, encoding, callback); - } else { - this.emit("error", new MaxBodyLengthExceededError()); - this.abort(); - } - }; - RedirectableRequest.prototype.end = function(data, encoding, callback) { - if (typeof data === "function") { - callback = data; - data = encoding = null; - } else if (typeof encoding === "function") { - callback = encoding; - encoding = null; - } - if (!data) { - this._ended = this._ending = true; - this._currentRequest.end(null, null, callback); - } else { - var self = this; - var currentRequest = this._currentRequest; - this.write(data, encoding, function() { - self._ended = true; - currentRequest.end(null, null, callback); - }); - this._ending = true; - } - }; - RedirectableRequest.prototype.setHeader = function(name, value) { - this._options.headers[name] = value; - this._currentRequest.setHeader(name, value); - }; - RedirectableRequest.prototype.removeHeader = function(name) { - delete this._options.headers[name]; - this._currentRequest.removeHeader(name); - }; - RedirectableRequest.prototype.setTimeout = function(msecs, callback) { - var self = this; - function destroyOnTimeout(socket) { - socket.setTimeout(msecs); - socket.removeListener("timeout", socket.destroy); - socket.addListener("timeout", socket.destroy); - } - function startTimer(socket) { - if (self._timeout) { - clearTimeout(self._timeout); - } - self._timeout = setTimeout(function() { - self.emit("timeout"); - clearTimer(); - }, msecs); - destroyOnTimeout(socket); - } - function clearTimer() { - if (self._timeout) { - clearTimeout(self._timeout); - self._timeout = null; - } - self.removeListener("abort", clearTimer); - self.removeListener("error", clearTimer); - self.removeListener("response", clearTimer); - if (callback) { - self.removeListener("timeout", callback); - } - if (!self.socket) { - self._currentRequest.removeListener("socket", startTimer); - } - } - if (callback) { - this.on("timeout", callback); - } - if (this.socket) { - startTimer(this.socket); - } else { - this._currentRequest.once("socket", startTimer); - } - this.on("socket", destroyOnTimeout); - this.on("abort", clearTimer); - this.on("error", clearTimer); - this.on("response", clearTimer); - return this; - }; - [ - "flushHeaders", - "getHeader", - "setNoDelay", - "setSocketKeepAlive" - ].forEach(function(method) { - RedirectableRequest.prototype[method] = function(a, b) { - return this._currentRequest[method](a, b); - }; - }); - ["aborted", "connection", "socket"].forEach(function(property) { - Object.defineProperty(RedirectableRequest.prototype, property, { - get: function() { - return this._currentRequest[property]; - } - }); - }); - RedirectableRequest.prototype._sanitizeOptions = function(options) { - if (!options.headers) { - options.headers = {}; - } - if (options.host) { - if (!options.hostname) { - options.hostname = options.host; - } - delete options.host; - } - if (!options.pathname && options.path) { - var searchPos = options.path.indexOf("?"); - if (searchPos < 0) { - options.pathname = options.path; - } else { - options.pathname = options.path.substring(0, searchPos); - options.search = options.path.substring(searchPos); - } - } - }; - RedirectableRequest.prototype._performRequest = function() { - var protocol = this._options.protocol; - var nativeProtocol = this._options.nativeProtocols[protocol]; - if (!nativeProtocol) { - this.emit("error", new TypeError("Unsupported protocol " + protocol)); - return; - } - if (this._options.agents) { - var scheme = protocol.slice(0, -1); - this._options.agent = this._options.agents[scheme]; - } - var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse); - request._redirectable = this; - for (var event of events) { - request.on(event, eventHandlers[event]); - } - this._currentUrl = /^\//.test(this._options.path) ? url.format(this._options) : this._currentUrl = this._options.path; - if (this._isRedirect) { - var i = 0; - var self = this; - var buffers = this._requestBodyBuffers; - (function writeNext(error) { - if (request === self._currentRequest) { - if (error) { - self.emit("error", error); - } else if (i < buffers.length) { - var buffer = buffers[i++]; - if (!request.finished) { - request.write(buffer.data, buffer.encoding, writeNext); - } - } else if (self._ended) { - request.end(); - } - } - })(); - } - }; - RedirectableRequest.prototype._processResponse = function(response) { - var statusCode = response.statusCode; - if (this._options.trackRedirects) { - this._redirects.push({ - url: this._currentUrl, - headers: response.headers, - statusCode - }); - } - var location = response.headers.location; - if (!location || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) { - response.responseUrl = this._currentUrl; - response.redirects = this._redirects; - this.emit("response", response); - this._requestBodyBuffers = []; - return; - } - abortRequest(this._currentRequest); - response.destroy(); - if (++this._redirectCount > this._options.maxRedirects) { - this.emit("error", new TooManyRedirectsError()); - return; - } - var requestHeaders; - var beforeRedirect = this._options.beforeRedirect; - if (beforeRedirect) { - requestHeaders = Object.assign({ - Host: response.req.getHeader("host") - }, this._options.headers); - } - var method = this._options.method; - if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) { - this._options.method = "GET"; - this._requestBodyBuffers = []; - removeMatchingHeaders(/^content-/i, this._options.headers); - } - var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); - var currentUrlParts = url.parse(this._currentUrl); - var currentHost = currentHostHeader || currentUrlParts.host; - var currentUrl = /^\w+:/.test(location) ? this._currentUrl : url.format(Object.assign(currentUrlParts, { host: currentHost })); - var redirectUrl; - try { - redirectUrl = url.resolve(currentUrl, location); - } catch (cause) { - this.emit("error", new RedirectionError(cause)); - return; - } - debug("redirecting to", redirectUrl); - this._isRedirect = true; - var redirectUrlParts = url.parse(redirectUrl); - Object.assign(this._options, redirectUrlParts); - if (redirectUrlParts.protocol !== currentUrlParts.protocol && redirectUrlParts.protocol !== "https:" || redirectUrlParts.host !== currentHost && !isSubdomain(redirectUrlParts.host, currentHost)) { - removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers); - } - if (typeof beforeRedirect === "function") { - var responseDetails = { - headers: response.headers, - statusCode - }; - var requestDetails = { - url: currentUrl, - method, - headers: requestHeaders - }; - try { - beforeRedirect(this._options, responseDetails, requestDetails); - } catch (err) { - this.emit("error", err); - return; - } - this._sanitizeOptions(this._options); - } - try { - this._performRequest(); - } catch (cause) { - this.emit("error", new RedirectionError(cause)); - } - }; - function wrap(protocols) { - var exports3 = { - maxRedirects: 21, - maxBodyLength: 10 * 1024 * 1024 - }; - var nativeProtocols = {}; - Object.keys(protocols).forEach(function(scheme) { - var protocol = scheme + ":"; - var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; - var wrappedProtocol = exports3[scheme] = Object.create(nativeProtocol); - function request(input, options, callback) { - if (typeof input === "string") { - var urlStr = input; - try { - input = urlToOptions(new URL(urlStr)); - } catch (err) { - input = url.parse(urlStr); - } - } else if (URL && input instanceof URL) { - input = urlToOptions(input); - } else { - callback = options; - options = input; - input = { protocol }; - } - if (typeof options === "function") { - callback = options; - options = null; - } - options = Object.assign({ - maxRedirects: exports3.maxRedirects, - maxBodyLength: exports3.maxBodyLength - }, input, options); - options.nativeProtocols = nativeProtocols; - assert.equal(options.protocol, protocol, "protocol mismatch"); - debug("options", options); - return new RedirectableRequest(options, callback); - } - function get(input, options, callback) { - var wrappedRequest = wrappedProtocol.request(input, options, callback); - wrappedRequest.end(); - return wrappedRequest; - } - Object.defineProperties(wrappedProtocol, { - request: { value: request, configurable: true, enumerable: true, writable: true }, - get: { value: get, configurable: true, enumerable: true, writable: true } - }); - }); - return exports3; - } - function noop() { - } - function urlToOptions(urlObject) { - var options = { - protocol: urlObject.protocol, - hostname: urlObject.hostname.startsWith("[") ? urlObject.hostname.slice(1, -1) : urlObject.hostname, - hash: urlObject.hash, - search: urlObject.search, - pathname: urlObject.pathname, - path: urlObject.pathname + urlObject.search, - href: urlObject.href - }; - if (urlObject.port !== "") { - options.port = Number(urlObject.port); - } - return options; - } - function removeMatchingHeaders(regex, headers) { - var lastValue; - for (var header in headers) { - if (regex.test(header)) { - lastValue = headers[header]; - delete headers[header]; - } - } - return lastValue === null || typeof lastValue === "undefined" ? void 0 : String(lastValue).trim(); - } - function createErrorType(code, defaultMessage) { - function CustomError(cause) { - Error.captureStackTrace(this, this.constructor); - if (!cause) { - this.message = defaultMessage; - } else { - this.message = defaultMessage + ": " + cause.message; - this.cause = cause; - } - } - CustomError.prototype = new Error(); - CustomError.prototype.constructor = CustomError; - CustomError.prototype.name = "Error [" + code + "]"; - CustomError.prototype.code = code; - return CustomError; - } - function abortRequest(request) { - for (var event of events) { - request.removeListener(event, eventHandlers[event]); - } - request.on("error", noop); - request.abort(); - } - function isSubdomain(subdomain, domain) { - const dot = subdomain.length - domain.length - 1; - return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); - } - module2.exports = wrap({ http, https }); - module2.exports.wrap = wrap; - } -}); - -// node_modules/axios/lib/env/data.js -var require_data = __commonJS({ - "node_modules/axios/lib/env/data.js"(exports2, module2) { - module2.exports = { - "version": "0.27.2" - }; - } -}); - -// node_modules/axios/lib/adapters/http.js -var require_http = __commonJS({ - "node_modules/axios/lib/adapters/http.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var settle = require_settle(); - var buildFullPath = require_buildFullPath(); - var buildURL = require_buildURL(); - var http = require("http"); - var https = require("https"); - var httpFollow = require_follow_redirects().http; - var httpsFollow = require_follow_redirects().https; - var url = require("url"); - var zlib = require("zlib"); - var VERSION = require_data().version; - var transitionalDefaults = require_transitional(); - var AxiosError = require_AxiosError(); - var CanceledError = require_CanceledError(); - var isHttps = /https:?/; - var supportedProtocols = ["http:", "https:", "file:"]; - function setProxy(options, proxy, location) { - options.hostname = proxy.host; - options.host = proxy.host; - options.port = proxy.port; - options.path = location; - if (proxy.auth) { - var base64 = Buffer.from(proxy.auth.username + ":" + proxy.auth.password, "utf8").toString("base64"); - options.headers["Proxy-Authorization"] = "Basic " + base64; - } - options.beforeRedirect = function beforeRedirect(redirection) { - redirection.headers.host = redirection.host; - setProxy(redirection, proxy, redirection.href); - }; - } - module2.exports = function httpAdapter(config) { - return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { - var onCanceled; - function done() { - if (config.cancelToken) { - config.cancelToken.unsubscribe(onCanceled); - } - if (config.signal) { - config.signal.removeEventListener("abort", onCanceled); - } - } - var resolve = function resolve2(value) { - done(); - resolvePromise(value); - }; - var rejected = false; - var reject = function reject2(value) { - done(); - rejected = true; - rejectPromise(value); - }; - var data = config.data; - var headers = config.headers; - var headerNames = {}; - Object.keys(headers).forEach(function storeLowerName(name) { - headerNames[name.toLowerCase()] = name; - }); - if ("user-agent" in headerNames) { - if (!headers[headerNames["user-agent"]]) { - delete headers[headerNames["user-agent"]]; - } - } else { - headers["User-Agent"] = "axios/" + VERSION; - } - if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) { - Object.assign(headers, data.getHeaders()); - } else if (data && !utils.isStream(data)) { - if (Buffer.isBuffer(data)) { - } else if (utils.isArrayBuffer(data)) { - data = Buffer.from(new Uint8Array(data)); - } else if (utils.isString(data)) { - data = Buffer.from(data, "utf-8"); - } else { - return reject(new AxiosError("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream", AxiosError.ERR_BAD_REQUEST, config)); - } - if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { - return reject(new AxiosError("Request body larger than maxBodyLength limit", AxiosError.ERR_BAD_REQUEST, config)); - } - if (!headerNames["content-length"]) { - headers["Content-Length"] = data.length; - } - } - var auth = void 0; - if (config.auth) { - var username = config.auth.username || ""; - var password = config.auth.password || ""; - auth = username + ":" + password; - } - var fullPath = buildFullPath(config.baseURL, config.url); - var parsed = url.parse(fullPath); - var protocol = parsed.protocol || supportedProtocols[0]; - if (supportedProtocols.indexOf(protocol) === -1) { - return reject(new AxiosError("Unsupported protocol " + protocol, AxiosError.ERR_BAD_REQUEST, config)); - } - if (!auth && parsed.auth) { - var urlAuth = parsed.auth.split(":"); - var urlUsername = urlAuth[0] || ""; - var urlPassword = urlAuth[1] || ""; - auth = urlUsername + ":" + urlPassword; - } - if (auth && headerNames.authorization) { - delete headers[headerNames.authorization]; - } - var isHttpsRequest = isHttps.test(protocol); - var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; - try { - buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ""); - } catch (err) { - var customErr = new Error(err.message); - customErr.config = config; - customErr.url = config.url; - customErr.exists = true; - reject(customErr); - } - var options = { - path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ""), - method: config.method.toUpperCase(), - headers, - agent, - agents: { http: config.httpAgent, https: config.httpsAgent }, - auth - }; - if (config.socketPath) { - options.socketPath = config.socketPath; - } else { - options.hostname = parsed.hostname; - options.port = parsed.port; - } - var proxy = config.proxy; - if (!proxy && proxy !== false) { - var proxyEnv = protocol.slice(0, -1) + "_proxy"; - var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()]; - if (proxyUrl) { - var parsedProxyUrl = url.parse(proxyUrl); - var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY; - var shouldProxy = true; - if (noProxyEnv) { - var noProxy = noProxyEnv.split(",").map(function trim(s) { - return s.trim(); - }); - shouldProxy = !noProxy.some(function proxyMatch(proxyElement) { - if (!proxyElement) { - return false; - } - if (proxyElement === "*") { - return true; - } - if (proxyElement[0] === "." && parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) { - return true; - } - return parsed.hostname === proxyElement; - }); - } - if (shouldProxy) { - proxy = { - host: parsedProxyUrl.hostname, - port: parsedProxyUrl.port, - protocol: parsedProxyUrl.protocol - }; - if (parsedProxyUrl.auth) { - var proxyUrlAuth = parsedProxyUrl.auth.split(":"); - proxy.auth = { - username: proxyUrlAuth[0], - password: proxyUrlAuth[1] - }; - } - } - } - } - if (proxy) { - options.headers.host = parsed.hostname + (parsed.port ? ":" + parsed.port : ""); - setProxy(options, proxy, protocol + "//" + parsed.hostname + (parsed.port ? ":" + parsed.port : "") + options.path); - } - var transport; - var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true); - if (config.transport) { - transport = config.transport; - } else if (config.maxRedirects === 0) { - transport = isHttpsProxy ? https : http; - } else { - if (config.maxRedirects) { - options.maxRedirects = config.maxRedirects; - } - if (config.beforeRedirect) { - options.beforeRedirect = config.beforeRedirect; - } - transport = isHttpsProxy ? httpsFollow : httpFollow; - } - if (config.maxBodyLength > -1) { - options.maxBodyLength = config.maxBodyLength; - } - if (config.insecureHTTPParser) { - options.insecureHTTPParser = config.insecureHTTPParser; - } - var req = transport.request(options, function handleResponse(res) { - if (req.aborted) - return; - var stream = res; - var lastRequest = res.req || req; - if (res.statusCode !== 204 && lastRequest.method !== "HEAD" && config.decompress !== false) { - switch (res.headers["content-encoding"]) { - case "gzip": - case "compress": - case "deflate": - stream = stream.pipe(zlib.createUnzip()); - delete res.headers["content-encoding"]; - break; - } - } - var response = { - status: res.statusCode, - statusText: res.statusMessage, - headers: res.headers, - config, - request: lastRequest - }; - if (config.responseType === "stream") { - response.data = stream; - settle(resolve, reject, response); - } else { - var responseBuffer = []; - var totalResponseBytes = 0; - stream.on("data", function handleStreamData(chunk) { - responseBuffer.push(chunk); - totalResponseBytes += chunk.length; - if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { - rejected = true; - stream.destroy(); - reject(new AxiosError("maxContentLength size of " + config.maxContentLength + " exceeded", AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); - } - }); - stream.on("aborted", function handlerStreamAborted() { - if (rejected) { - return; - } - stream.destroy(); - reject(new AxiosError("maxContentLength size of " + config.maxContentLength + " exceeded", AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); - }); - stream.on("error", function handleStreamError(err) { - if (req.aborted) - return; - reject(AxiosError.from(err, null, config, lastRequest)); - }); - stream.on("end", function handleStreamEnd() { - try { - var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); - if (config.responseType !== "arraybuffer") { - responseData = responseData.toString(config.responseEncoding); - if (!config.responseEncoding || config.responseEncoding === "utf8") { - responseData = utils.stripBOM(responseData); - } - } - response.data = responseData; - } catch (err) { - reject(AxiosError.from(err, null, config, response.request, response)); - } - settle(resolve, reject, response); - }); - } - }); - req.on("error", function handleRequestError(err) { - reject(AxiosError.from(err, null, config, req)); - }); - req.on("socket", function handleRequestSocket(socket) { - socket.setKeepAlive(true, 1e3 * 60); - }); - if (config.timeout) { - var timeout = parseInt(config.timeout, 10); - if (isNaN(timeout)) { - reject(new AxiosError("error trying to parse `config.timeout` to int", AxiosError.ERR_BAD_OPTION_VALUE, config, req)); - return; - } - req.setTimeout(timeout, function handleRequestTimeout() { - req.abort(); - var transitional = config.transitional || transitionalDefaults; - reject(new AxiosError("timeout of " + timeout + "ms exceeded", transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, req)); - }); - } - if (config.cancelToken || config.signal) { - onCanceled = function(cancel) { - if (req.aborted) - return; - req.abort(); - reject(!cancel || cancel && cancel.type ? new CanceledError() : cancel); - }; - config.cancelToken && config.cancelToken.subscribe(onCanceled); - if (config.signal) { - config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled); - } - } - if (utils.isStream(data)) { - data.on("error", function handleStreamError(err) { - reject(AxiosError.from(err, config, null, req)); - }).pipe(req); - } else { - req.end(data); - } - }); - }; - } -}); - -// node_modules/delayed-stream/lib/delayed_stream.js -var require_delayed_stream = __commonJS({ - "node_modules/delayed-stream/lib/delayed_stream.js"(exports2, module2) { - var Stream = require("stream").Stream; - var util = require("util"); - module2.exports = DelayedStream; - function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; - } - util.inherits(DelayedStream, Stream); - DelayedStream.create = function(source, options) { - var delayedStream = new this(); - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - delayedStream.source = source; - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; - source.on("error", function() { - }); - if (delayedStream.pauseStream) { - source.pause(); - } - return delayedStream; - }; - Object.defineProperty(DelayedStream.prototype, "readable", { - configurable: true, - enumerable: true, - get: function() { - return this.source.readable; - } - }); - DelayedStream.prototype.setEncoding = function() { - return this.source.setEncoding.apply(this.source, arguments); - }; - DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - this.source.resume(); - }; - DelayedStream.prototype.pause = function() { - this.source.pause(); - }; - DelayedStream.prototype.release = function() { - this._released = true; - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; - }; - DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; - }; - DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } - if (args[0] === "data") { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - this._bufferedEvents.push(args); - }; - DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } - if (this.dataSize <= this.maxDataSize) { - return; - } - this._maxDataSizeExceeded = true; - var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded."; - this.emit("error", new Error(message)); - }; - } -}); - -// node_modules/combined-stream/lib/combined_stream.js -var require_combined_stream = __commonJS({ - "node_modules/combined-stream/lib/combined_stream.js"(exports2, module2) { - var util = require("util"); - var Stream = require("stream").Stream; - var DelayedStream = require_delayed_stream(); - module2.exports = CombinedStream; - function CombinedStream() { - this.writable = false; - this.readable = true; - this.dataSize = 0; - this.maxDataSize = 2 * 1024 * 1024; - this.pauseStreams = true; - this._released = false; - this._streams = []; - this._currentStream = null; - this._insideLoop = false; - this._pendingNext = false; - } - util.inherits(CombinedStream, Stream); - CombinedStream.create = function(options) { - var combinedStream = new this(); - options = options || {}; - for (var option in options) { - combinedStream[option] = options[option]; - } - return combinedStream; - }; - CombinedStream.isStreamLike = function(stream) { - return typeof stream !== "function" && typeof stream !== "string" && typeof stream !== "boolean" && typeof stream !== "number" && !Buffer.isBuffer(stream); - }; - CombinedStream.prototype.append = function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - var newStream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams - }); - stream.on("data", this._checkDataSize.bind(this)); - stream = newStream; - } - this._handleErrors(stream); - if (this.pauseStreams) { - stream.pause(); - } - } - this._streams.push(stream); - return this; - }; - CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); - return dest; - }; - CombinedStream.prototype._getNext = function() { - this._currentStream = null; - if (this._insideLoop) { - this._pendingNext = true; - return; - } - this._insideLoop = true; - try { - do { - this._pendingNext = false; - this._realGetNext(); - } while (this._pendingNext); - } finally { - this._insideLoop = false; - } - }; - CombinedStream.prototype._realGetNext = function() { - var stream = this._streams.shift(); - if (typeof stream == "undefined") { - this.end(); - return; - } - if (typeof stream !== "function") { - this._pipeNext(stream); - return; - } - var getStream = stream; - getStream(function(stream2) { - var isStreamLike = CombinedStream.isStreamLike(stream2); - if (isStreamLike) { - stream2.on("data", this._checkDataSize.bind(this)); - this._handleErrors(stream2); - } - this._pipeNext(stream2); - }.bind(this)); - }; - CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on("end", this._getNext.bind(this)); - stream.pipe(this, { end: false }); - return; - } - var value = stream; - this.write(value); - this._getNext(); - }; - CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on("error", function(err) { - self._emitError(err); - }); - }; - CombinedStream.prototype.write = function(data) { - this.emit("data", data); - }; - CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; - } - if (this.pauseStreams && this._currentStream && typeof this._currentStream.pause == "function") - this._currentStream.pause(); - this.emit("pause"); - }; - CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } - if (this.pauseStreams && this._currentStream && typeof this._currentStream.resume == "function") - this._currentStream.resume(); - this.emit("resume"); - }; - CombinedStream.prototype.end = function() { - this._reset(); - this.emit("end"); - }; - CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit("close"); - }; - CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; - }; - CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; - } - var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded."; - this._emitError(new Error(message)); - }; - CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; - } - self.dataSize += stream.dataSize; - }); - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; - } - }; - CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit("error", err); - }; - } -}); - -// node_modules/mime-db/db.json -var require_db = __commonJS({ - "node_modules/mime-db/db.json"(exports2, module2) { - module2.exports = { - "application/1d-interleaved-parityfec": { - source: "iana" - }, - "application/3gpdash-qoe-report+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/3gpp-ims+xml": { - source: "iana", - compressible: true - }, - "application/3gpphal+json": { - source: "iana", - compressible: true - }, - "application/3gpphalforms+json": { - source: "iana", - compressible: true - }, - "application/a2l": { - source: "iana" - }, - "application/ace+cbor": { - source: "iana" - }, - "application/activemessage": { - source: "iana" - }, - "application/activity+json": { - source: "iana", - compressible: true - }, - "application/alto-costmap+json": { - source: "iana", - compressible: true - }, - "application/alto-costmapfilter+json": { - source: "iana", - compressible: true - }, - "application/alto-directory+json": { - source: "iana", - compressible: true - }, - "application/alto-endpointcost+json": { - source: "iana", - compressible: true - }, - "application/alto-endpointcostparams+json": { - source: "iana", - compressible: true - }, - "application/alto-endpointprop+json": { - source: "iana", - compressible: true - }, - "application/alto-endpointpropparams+json": { - source: "iana", - compressible: true - }, - "application/alto-error+json": { - source: "iana", - compressible: true - }, - "application/alto-networkmap+json": { - source: "iana", - compressible: true - }, - "application/alto-networkmapfilter+json": { - source: "iana", - compressible: true - }, - "application/alto-updatestreamcontrol+json": { - source: "iana", - compressible: true - }, - "application/alto-updatestreamparams+json": { - source: "iana", - compressible: true - }, - "application/aml": { - source: "iana" - }, - "application/andrew-inset": { - source: "iana", - extensions: ["ez"] - }, - "application/applefile": { - source: "iana" - }, - "application/applixware": { - source: "apache", - extensions: ["aw"] - }, - "application/at+jwt": { - source: "iana" - }, - "application/atf": { - source: "iana" - }, - "application/atfx": { - source: "iana" - }, - "application/atom+xml": { - source: "iana", - compressible: true, - extensions: ["atom"] - }, - "application/atomcat+xml": { - source: "iana", - compressible: true, - extensions: ["atomcat"] - }, - "application/atomdeleted+xml": { - source: "iana", - compressible: true, - extensions: ["atomdeleted"] - }, - "application/atomicmail": { - source: "iana" - }, - "application/atomsvc+xml": { - source: "iana", - compressible: true, - extensions: ["atomsvc"] - }, - "application/atsc-dwd+xml": { - source: "iana", - compressible: true, - extensions: ["dwd"] - }, - "application/atsc-dynamic-event-message": { - source: "iana" - }, - "application/atsc-held+xml": { - source: "iana", - compressible: true, - extensions: ["held"] - }, - "application/atsc-rdt+json": { - source: "iana", - compressible: true - }, - "application/atsc-rsat+xml": { - source: "iana", - compressible: true, - extensions: ["rsat"] - }, - "application/atxml": { - source: "iana" - }, - "application/auth-policy+xml": { - source: "iana", - compressible: true - }, - "application/bacnet-xdd+zip": { - source: "iana", - compressible: false - }, - "application/batch-smtp": { - source: "iana" - }, - "application/bdoc": { - compressible: false, - extensions: ["bdoc"] - }, - "application/beep+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/calendar+json": { - source: "iana", - compressible: true - }, - "application/calendar+xml": { - source: "iana", - compressible: true, - extensions: ["xcs"] - }, - "application/call-completion": { - source: "iana" - }, - "application/cals-1840": { - source: "iana" - }, - "application/captive+json": { - source: "iana", - compressible: true - }, - "application/cbor": { - source: "iana" - }, - "application/cbor-seq": { - source: "iana" - }, - "application/cccex": { - source: "iana" - }, - "application/ccmp+xml": { - source: "iana", - compressible: true - }, - "application/ccxml+xml": { - source: "iana", - compressible: true, - extensions: ["ccxml"] - }, - "application/cdfx+xml": { - source: "iana", - compressible: true, - extensions: ["cdfx"] - }, - "application/cdmi-capability": { - source: "iana", - extensions: ["cdmia"] - }, - "application/cdmi-container": { - source: "iana", - extensions: ["cdmic"] - }, - "application/cdmi-domain": { - source: "iana", - extensions: ["cdmid"] - }, - "application/cdmi-object": { - source: "iana", - extensions: ["cdmio"] - }, - "application/cdmi-queue": { - source: "iana", - extensions: ["cdmiq"] - }, - "application/cdni": { - source: "iana" - }, - "application/cea": { - source: "iana" - }, - "application/cea-2018+xml": { - source: "iana", - compressible: true - }, - "application/cellml+xml": { - source: "iana", - compressible: true - }, - "application/cfw": { - source: "iana" - }, - "application/city+json": { - source: "iana", - compressible: true - }, - "application/clr": { - source: "iana" - }, - "application/clue+xml": { - source: "iana", - compressible: true - }, - "application/clue_info+xml": { - source: "iana", - compressible: true - }, - "application/cms": { - source: "iana" - }, - "application/cnrp+xml": { - source: "iana", - compressible: true - }, - "application/coap-group+json": { - source: "iana", - compressible: true - }, - "application/coap-payload": { - source: "iana" - }, - "application/commonground": { - source: "iana" - }, - "application/conference-info+xml": { - source: "iana", - compressible: true - }, - "application/cose": { - source: "iana" - }, - "application/cose-key": { - source: "iana" - }, - "application/cose-key-set": { - source: "iana" - }, - "application/cpl+xml": { - source: "iana", - compressible: true, - extensions: ["cpl"] - }, - "application/csrattrs": { - source: "iana" - }, - "application/csta+xml": { - source: "iana", - compressible: true - }, - "application/cstadata+xml": { - source: "iana", - compressible: true - }, - "application/csvm+json": { - source: "iana", - compressible: true - }, - "application/cu-seeme": { - source: "apache", - extensions: ["cu"] - }, - "application/cwt": { - source: "iana" - }, - "application/cybercash": { - source: "iana" - }, - "application/dart": { - compressible: true - }, - "application/dash+xml": { - source: "iana", - compressible: true, - extensions: ["mpd"] - }, - "application/dash-patch+xml": { - source: "iana", - compressible: true, - extensions: ["mpp"] - }, - "application/dashdelta": { - source: "iana" - }, - "application/davmount+xml": { - source: "iana", - compressible: true, - extensions: ["davmount"] - }, - "application/dca-rft": { - source: "iana" - }, - "application/dcd": { - source: "iana" - }, - "application/dec-dx": { - source: "iana" - }, - "application/dialog-info+xml": { - source: "iana", - compressible: true - }, - "application/dicom": { - source: "iana" - }, - "application/dicom+json": { - source: "iana", - compressible: true - }, - "application/dicom+xml": { - source: "iana", - compressible: true - }, - "application/dii": { - source: "iana" - }, - "application/dit": { - source: "iana" - }, - "application/dns": { - source: "iana" - }, - "application/dns+json": { - source: "iana", - compressible: true - }, - "application/dns-message": { - source: "iana" - }, - "application/docbook+xml": { - source: "apache", - compressible: true, - extensions: ["dbk"] - }, - "application/dots+cbor": { - source: "iana" - }, - "application/dskpp+xml": { - source: "iana", - compressible: true - }, - "application/dssc+der": { - source: "iana", - extensions: ["dssc"] - }, - "application/dssc+xml": { - source: "iana", - compressible: true, - extensions: ["xdssc"] - }, - "application/dvcs": { - source: "iana" - }, - "application/ecmascript": { - source: "iana", - compressible: true, - extensions: ["es", "ecma"] - }, - "application/edi-consent": { - source: "iana" - }, - "application/edi-x12": { - source: "iana", - compressible: false - }, - "application/edifact": { - source: "iana", - compressible: false - }, - "application/efi": { - source: "iana" - }, - "application/elm+json": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/elm+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.cap+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/emergencycalldata.comment+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.control+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.deviceinfo+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.ecall.msd": { - source: "iana" - }, - "application/emergencycalldata.providerinfo+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.serviceinfo+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.subscriberinfo+xml": { - source: "iana", - compressible: true - }, - "application/emergencycalldata.veds+xml": { - source: "iana", - compressible: true - }, - "application/emma+xml": { - source: "iana", - compressible: true, - extensions: ["emma"] - }, - "application/emotionml+xml": { - source: "iana", - compressible: true, - extensions: ["emotionml"] - }, - "application/encaprtp": { - source: "iana" - }, - "application/epp+xml": { - source: "iana", - compressible: true - }, - "application/epub+zip": { - source: "iana", - compressible: false, - extensions: ["epub"] - }, - "application/eshop": { - source: "iana" - }, - "application/exi": { - source: "iana", - extensions: ["exi"] - }, - "application/expect-ct-report+json": { - source: "iana", - compressible: true - }, - "application/express": { - source: "iana", - extensions: ["exp"] - }, - "application/fastinfoset": { - source: "iana" - }, - "application/fastsoap": { - source: "iana" - }, - "application/fdt+xml": { - source: "iana", - compressible: true, - extensions: ["fdt"] - }, - "application/fhir+json": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/fhir+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/fido.trusted-apps+json": { - compressible: true - }, - "application/fits": { - source: "iana" - }, - "application/flexfec": { - source: "iana" - }, - "application/font-sfnt": { - source: "iana" - }, - "application/font-tdpfr": { - source: "iana", - extensions: ["pfr"] - }, - "application/font-woff": { - source: "iana", - compressible: false - }, - "application/framework-attributes+xml": { - source: "iana", - compressible: true - }, - "application/geo+json": { - source: "iana", - compressible: true, - extensions: ["geojson"] - }, - "application/geo+json-seq": { - source: "iana" - }, - "application/geopackage+sqlite3": { - source: "iana" - }, - "application/geoxacml+xml": { - source: "iana", - compressible: true - }, - "application/gltf-buffer": { - source: "iana" - }, - "application/gml+xml": { - source: "iana", - compressible: true, - extensions: ["gml"] - }, - "application/gpx+xml": { - source: "apache", - compressible: true, - extensions: ["gpx"] - }, - "application/gxf": { - source: "apache", - extensions: ["gxf"] - }, - "application/gzip": { - source: "iana", - compressible: false, - extensions: ["gz"] - }, - "application/h224": { - source: "iana" - }, - "application/held+xml": { - source: "iana", - compressible: true - }, - "application/hjson": { - extensions: ["hjson"] - }, - "application/http": { - source: "iana" - }, - "application/hyperstudio": { - source: "iana", - extensions: ["stk"] - }, - "application/ibe-key-request+xml": { - source: "iana", - compressible: true - }, - "application/ibe-pkg-reply+xml": { - source: "iana", - compressible: true - }, - "application/ibe-pp-data": { - source: "iana" - }, - "application/iges": { - source: "iana" - }, - "application/im-iscomposing+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/index": { - source: "iana" - }, - "application/index.cmd": { - source: "iana" - }, - "application/index.obj": { - source: "iana" - }, - "application/index.response": { - source: "iana" - }, - "application/index.vnd": { - source: "iana" - }, - "application/inkml+xml": { - source: "iana", - compressible: true, - extensions: ["ink", "inkml"] - }, - "application/iotp": { - source: "iana" - }, - "application/ipfix": { - source: "iana", - extensions: ["ipfix"] - }, - "application/ipp": { - source: "iana" - }, - "application/isup": { - source: "iana" - }, - "application/its+xml": { - source: "iana", - compressible: true, - extensions: ["its"] - }, - "application/java-archive": { - source: "apache", - compressible: false, - extensions: ["jar", "war", "ear"] - }, - "application/java-serialized-object": { - source: "apache", - compressible: false, - extensions: ["ser"] - }, - "application/java-vm": { - source: "apache", - compressible: false, - extensions: ["class"] - }, - "application/javascript": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["js", "mjs"] - }, - "application/jf2feed+json": { - source: "iana", - compressible: true - }, - "application/jose": { - source: "iana" - }, - "application/jose+json": { - source: "iana", - compressible: true - }, - "application/jrd+json": { - source: "iana", - compressible: true - }, - "application/jscalendar+json": { - source: "iana", - compressible: true - }, - "application/json": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["json", "map"] - }, - "application/json-patch+json": { - source: "iana", - compressible: true - }, - "application/json-seq": { - source: "iana" - }, - "application/json5": { - extensions: ["json5"] - }, - "application/jsonml+json": { - source: "apache", - compressible: true, - extensions: ["jsonml"] - }, - "application/jwk+json": { - source: "iana", - compressible: true - }, - "application/jwk-set+json": { - source: "iana", - compressible: true - }, - "application/jwt": { - source: "iana" - }, - "application/kpml-request+xml": { - source: "iana", - compressible: true - }, - "application/kpml-response+xml": { - source: "iana", - compressible: true - }, - "application/ld+json": { - source: "iana", - compressible: true, - extensions: ["jsonld"] - }, - "application/lgr+xml": { - source: "iana", - compressible: true, - extensions: ["lgr"] - }, - "application/link-format": { - source: "iana" - }, - "application/load-control+xml": { - source: "iana", - compressible: true - }, - "application/lost+xml": { - source: "iana", - compressible: true, - extensions: ["lostxml"] - }, - "application/lostsync+xml": { - source: "iana", - compressible: true - }, - "application/lpf+zip": { - source: "iana", - compressible: false - }, - "application/lxf": { - source: "iana" - }, - "application/mac-binhex40": { - source: "iana", - extensions: ["hqx"] - }, - "application/mac-compactpro": { - source: "apache", - extensions: ["cpt"] - }, - "application/macwriteii": { - source: "iana" - }, - "application/mads+xml": { - source: "iana", - compressible: true, - extensions: ["mads"] - }, - "application/manifest+json": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["webmanifest"] - }, - "application/marc": { - source: "iana", - extensions: ["mrc"] - }, - "application/marcxml+xml": { - source: "iana", - compressible: true, - extensions: ["mrcx"] - }, - "application/mathematica": { - source: "iana", - extensions: ["ma", "nb", "mb"] - }, - "application/mathml+xml": { - source: "iana", - compressible: true, - extensions: ["mathml"] - }, - "application/mathml-content+xml": { - source: "iana", - compressible: true - }, - "application/mathml-presentation+xml": { - source: "iana", - compressible: true - }, - "application/mbms-associated-procedure-description+xml": { - source: "iana", - compressible: true - }, - "application/mbms-deregister+xml": { - source: "iana", - compressible: true - }, - "application/mbms-envelope+xml": { - source: "iana", - compressible: true - }, - "application/mbms-msk+xml": { - source: "iana", - compressible: true - }, - "application/mbms-msk-response+xml": { - source: "iana", - compressible: true - }, - "application/mbms-protection-description+xml": { - source: "iana", - compressible: true - }, - "application/mbms-reception-report+xml": { - source: "iana", - compressible: true - }, - "application/mbms-register+xml": { - source: "iana", - compressible: true - }, - "application/mbms-register-response+xml": { - source: "iana", - compressible: true - }, - "application/mbms-schedule+xml": { - source: "iana", - compressible: true - }, - "application/mbms-user-service-description+xml": { - source: "iana", - compressible: true - }, - "application/mbox": { - source: "iana", - extensions: ["mbox"] - }, - "application/media-policy-dataset+xml": { - source: "iana", - compressible: true, - extensions: ["mpf"] - }, - "application/media_control+xml": { - source: "iana", - compressible: true - }, - "application/mediaservercontrol+xml": { - source: "iana", - compressible: true, - extensions: ["mscml"] - }, - "application/merge-patch+json": { - source: "iana", - compressible: true - }, - "application/metalink+xml": { - source: "apache", - compressible: true, - extensions: ["metalink"] - }, - "application/metalink4+xml": { - source: "iana", - compressible: true, - extensions: ["meta4"] - }, - "application/mets+xml": { - source: "iana", - compressible: true, - extensions: ["mets"] - }, - "application/mf4": { - source: "iana" - }, - "application/mikey": { - source: "iana" - }, - "application/mipc": { - source: "iana" - }, - "application/missing-blocks+cbor-seq": { - source: "iana" - }, - "application/mmt-aei+xml": { - source: "iana", - compressible: true, - extensions: ["maei"] - }, - "application/mmt-usd+xml": { - source: "iana", - compressible: true, - extensions: ["musd"] - }, - "application/mods+xml": { - source: "iana", - compressible: true, - extensions: ["mods"] - }, - "application/moss-keys": { - source: "iana" - }, - "application/moss-signature": { - source: "iana" - }, - "application/mosskey-data": { - source: "iana" - }, - "application/mosskey-request": { - source: "iana" - }, - "application/mp21": { - source: "iana", - extensions: ["m21", "mp21"] - }, - "application/mp4": { - source: "iana", - extensions: ["mp4s", "m4p"] - }, - "application/mpeg4-generic": { - source: "iana" - }, - "application/mpeg4-iod": { - source: "iana" - }, - "application/mpeg4-iod-xmt": { - source: "iana" - }, - "application/mrb-consumer+xml": { - source: "iana", - compressible: true - }, - "application/mrb-publish+xml": { - source: "iana", - compressible: true - }, - "application/msc-ivr+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/msc-mixer+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/msword": { - source: "iana", - compressible: false, - extensions: ["doc", "dot"] - }, - "application/mud+json": { - source: "iana", - compressible: true - }, - "application/multipart-core": { - source: "iana" - }, - "application/mxf": { - source: "iana", - extensions: ["mxf"] - }, - "application/n-quads": { - source: "iana", - extensions: ["nq"] - }, - "application/n-triples": { - source: "iana", - extensions: ["nt"] - }, - "application/nasdata": { - source: "iana" - }, - "application/news-checkgroups": { - source: "iana", - charset: "US-ASCII" - }, - "application/news-groupinfo": { - source: "iana", - charset: "US-ASCII" - }, - "application/news-transmission": { - source: "iana" - }, - "application/nlsml+xml": { - source: "iana", - compressible: true - }, - "application/node": { - source: "iana", - extensions: ["cjs"] - }, - "application/nss": { - source: "iana" - }, - "application/oauth-authz-req+jwt": { - source: "iana" - }, - "application/oblivious-dns-message": { - source: "iana" - }, - "application/ocsp-request": { - source: "iana" - }, - "application/ocsp-response": { - source: "iana" - }, - "application/octet-stream": { - source: "iana", - compressible: false, - extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] - }, - "application/oda": { - source: "iana", - extensions: ["oda"] - }, - "application/odm+xml": { - source: "iana", - compressible: true - }, - "application/odx": { - source: "iana" - }, - "application/oebps-package+xml": { - source: "iana", - compressible: true, - extensions: ["opf"] - }, - "application/ogg": { - source: "iana", - compressible: false, - extensions: ["ogx"] - }, - "application/omdoc+xml": { - source: "apache", - compressible: true, - extensions: ["omdoc"] - }, - "application/onenote": { - source: "apache", - extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] - }, - "application/opc-nodeset+xml": { - source: "iana", - compressible: true - }, - "application/oscore": { - source: "iana" - }, - "application/oxps": { - source: "iana", - extensions: ["oxps"] - }, - "application/p21": { - source: "iana" - }, - "application/p21+zip": { - source: "iana", - compressible: false - }, - "application/p2p-overlay+xml": { - source: "iana", - compressible: true, - extensions: ["relo"] - }, - "application/parityfec": { - source: "iana" - }, - "application/passport": { - source: "iana" - }, - "application/patch-ops-error+xml": { - source: "iana", - compressible: true, - extensions: ["xer"] - }, - "application/pdf": { - source: "iana", - compressible: false, - extensions: ["pdf"] - }, - "application/pdx": { - source: "iana" - }, - "application/pem-certificate-chain": { - source: "iana" - }, - "application/pgp-encrypted": { - source: "iana", - compressible: false, - extensions: ["pgp"] - }, - "application/pgp-keys": { - source: "iana", - extensions: ["asc"] - }, - "application/pgp-signature": { - source: "iana", - extensions: ["asc", "sig"] - }, - "application/pics-rules": { - source: "apache", - extensions: ["prf"] - }, - "application/pidf+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/pidf-diff+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/pkcs10": { - source: "iana", - extensions: ["p10"] - }, - "application/pkcs12": { - source: "iana" - }, - "application/pkcs7-mime": { - source: "iana", - extensions: ["p7m", "p7c"] - }, - "application/pkcs7-signature": { - source: "iana", - extensions: ["p7s"] - }, - "application/pkcs8": { - source: "iana", - extensions: ["p8"] - }, - "application/pkcs8-encrypted": { - source: "iana" - }, - "application/pkix-attr-cert": { - source: "iana", - extensions: ["ac"] - }, - "application/pkix-cert": { - source: "iana", - extensions: ["cer"] - }, - "application/pkix-crl": { - source: "iana", - extensions: ["crl"] - }, - "application/pkix-pkipath": { - source: "iana", - extensions: ["pkipath"] - }, - "application/pkixcmp": { - source: "iana", - extensions: ["pki"] - }, - "application/pls+xml": { - source: "iana", - compressible: true, - extensions: ["pls"] - }, - "application/poc-settings+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/postscript": { - source: "iana", - compressible: true, - extensions: ["ai", "eps", "ps"] - }, - "application/ppsp-tracker+json": { - source: "iana", - compressible: true - }, - "application/problem+json": { - source: "iana", - compressible: true - }, - "application/problem+xml": { - source: "iana", - compressible: true - }, - "application/provenance+xml": { - source: "iana", - compressible: true, - extensions: ["provx"] - }, - "application/prs.alvestrand.titrax-sheet": { - source: "iana" - }, - "application/prs.cww": { - source: "iana", - extensions: ["cww"] - }, - "application/prs.cyn": { - source: "iana", - charset: "7-BIT" - }, - "application/prs.hpub+zip": { - source: "iana", - compressible: false - }, - "application/prs.nprend": { - source: "iana" - }, - "application/prs.plucker": { - source: "iana" - }, - "application/prs.rdf-xml-crypt": { - source: "iana" - }, - "application/prs.xsf+xml": { - source: "iana", - compressible: true - }, - "application/pskc+xml": { - source: "iana", - compressible: true, - extensions: ["pskcxml"] - }, - "application/pvd+json": { - source: "iana", - compressible: true - }, - "application/qsig": { - source: "iana" - }, - "application/raml+yaml": { - compressible: true, - extensions: ["raml"] - }, - "application/raptorfec": { - source: "iana" - }, - "application/rdap+json": { - source: "iana", - compressible: true - }, - "application/rdf+xml": { - source: "iana", - compressible: true, - extensions: ["rdf", "owl"] - }, - "application/reginfo+xml": { - source: "iana", - compressible: true, - extensions: ["rif"] - }, - "application/relax-ng-compact-syntax": { - source: "iana", - extensions: ["rnc"] - }, - "application/remote-printing": { - source: "iana" - }, - "application/reputon+json": { - source: "iana", - compressible: true - }, - "application/resource-lists+xml": { - source: "iana", - compressible: true, - extensions: ["rl"] - }, - "application/resource-lists-diff+xml": { - source: "iana", - compressible: true, - extensions: ["rld"] - }, - "application/rfc+xml": { - source: "iana", - compressible: true - }, - "application/riscos": { - source: "iana" - }, - "application/rlmi+xml": { - source: "iana", - compressible: true - }, - "application/rls-services+xml": { - source: "iana", - compressible: true, - extensions: ["rs"] - }, - "application/route-apd+xml": { - source: "iana", - compressible: true, - extensions: ["rapd"] - }, - "application/route-s-tsid+xml": { - source: "iana", - compressible: true, - extensions: ["sls"] - }, - "application/route-usd+xml": { - source: "iana", - compressible: true, - extensions: ["rusd"] - }, - "application/rpki-ghostbusters": { - source: "iana", - extensions: ["gbr"] - }, - "application/rpki-manifest": { - source: "iana", - extensions: ["mft"] - }, - "application/rpki-publication": { - source: "iana" - }, - "application/rpki-roa": { - source: "iana", - extensions: ["roa"] - }, - "application/rpki-updown": { - source: "iana" - }, - "application/rsd+xml": { - source: "apache", - compressible: true, - extensions: ["rsd"] - }, - "application/rss+xml": { - source: "apache", - compressible: true, - extensions: ["rss"] - }, - "application/rtf": { - source: "iana", - compressible: true, - extensions: ["rtf"] - }, - "application/rtploopback": { - source: "iana" - }, - "application/rtx": { - source: "iana" - }, - "application/samlassertion+xml": { - source: "iana", - compressible: true - }, - "application/samlmetadata+xml": { - source: "iana", - compressible: true - }, - "application/sarif+json": { - source: "iana", - compressible: true - }, - "application/sarif-external-properties+json": { - source: "iana", - compressible: true - }, - "application/sbe": { - source: "iana" - }, - "application/sbml+xml": { - source: "iana", - compressible: true, - extensions: ["sbml"] - }, - "application/scaip+xml": { - source: "iana", - compressible: true - }, - "application/scim+json": { - source: "iana", - compressible: true - }, - "application/scvp-cv-request": { - source: "iana", - extensions: ["scq"] - }, - "application/scvp-cv-response": { - source: "iana", - extensions: ["scs"] - }, - "application/scvp-vp-request": { - source: "iana", - extensions: ["spq"] - }, - "application/scvp-vp-response": { - source: "iana", - extensions: ["spp"] - }, - "application/sdp": { - source: "iana", - extensions: ["sdp"] - }, - "application/secevent+jwt": { - source: "iana" - }, - "application/senml+cbor": { - source: "iana" - }, - "application/senml+json": { - source: "iana", - compressible: true - }, - "application/senml+xml": { - source: "iana", - compressible: true, - extensions: ["senmlx"] - }, - "application/senml-etch+cbor": { - source: "iana" - }, - "application/senml-etch+json": { - source: "iana", - compressible: true - }, - "application/senml-exi": { - source: "iana" - }, - "application/sensml+cbor": { - source: "iana" - }, - "application/sensml+json": { - source: "iana", - compressible: true - }, - "application/sensml+xml": { - source: "iana", - compressible: true, - extensions: ["sensmlx"] - }, - "application/sensml-exi": { - source: "iana" - }, - "application/sep+xml": { - source: "iana", - compressible: true - }, - "application/sep-exi": { - source: "iana" - }, - "application/session-info": { - source: "iana" - }, - "application/set-payment": { - source: "iana" - }, - "application/set-payment-initiation": { - source: "iana", - extensions: ["setpay"] - }, - "application/set-registration": { - source: "iana" - }, - "application/set-registration-initiation": { - source: "iana", - extensions: ["setreg"] - }, - "application/sgml": { - source: "iana" - }, - "application/sgml-open-catalog": { - source: "iana" - }, - "application/shf+xml": { - source: "iana", - compressible: true, - extensions: ["shf"] - }, - "application/sieve": { - source: "iana", - extensions: ["siv", "sieve"] - }, - "application/simple-filter+xml": { - source: "iana", - compressible: true - }, - "application/simple-message-summary": { - source: "iana" - }, - "application/simplesymbolcontainer": { - source: "iana" - }, - "application/sipc": { - source: "iana" - }, - "application/slate": { - source: "iana" - }, - "application/smil": { - source: "iana" - }, - "application/smil+xml": { - source: "iana", - compressible: true, - extensions: ["smi", "smil"] - }, - "application/smpte336m": { - source: "iana" - }, - "application/soap+fastinfoset": { - source: "iana" - }, - "application/soap+xml": { - source: "iana", - compressible: true - }, - "application/sparql-query": { - source: "iana", - extensions: ["rq"] - }, - "application/sparql-results+xml": { - source: "iana", - compressible: true, - extensions: ["srx"] - }, - "application/spdx+json": { - source: "iana", - compressible: true - }, - "application/spirits-event+xml": { - source: "iana", - compressible: true - }, - "application/sql": { - source: "iana" - }, - "application/srgs": { - source: "iana", - extensions: ["gram"] - }, - "application/srgs+xml": { - source: "iana", - compressible: true, - extensions: ["grxml"] - }, - "application/sru+xml": { - source: "iana", - compressible: true, - extensions: ["sru"] - }, - "application/ssdl+xml": { - source: "apache", - compressible: true, - extensions: ["ssdl"] - }, - "application/ssml+xml": { - source: "iana", - compressible: true, - extensions: ["ssml"] - }, - "application/stix+json": { - source: "iana", - compressible: true - }, - "application/swid+xml": { - source: "iana", - compressible: true, - extensions: ["swidtag"] - }, - "application/tamp-apex-update": { - source: "iana" - }, - "application/tamp-apex-update-confirm": { - source: "iana" - }, - "application/tamp-community-update": { - source: "iana" - }, - "application/tamp-community-update-confirm": { - source: "iana" - }, - "application/tamp-error": { - source: "iana" - }, - "application/tamp-sequence-adjust": { - source: "iana" - }, - "application/tamp-sequence-adjust-confirm": { - source: "iana" - }, - "application/tamp-status-query": { - source: "iana" - }, - "application/tamp-status-response": { - source: "iana" - }, - "application/tamp-update": { - source: "iana" - }, - "application/tamp-update-confirm": { - source: "iana" - }, - "application/tar": { - compressible: true - }, - "application/taxii+json": { - source: "iana", - compressible: true - }, - "application/td+json": { - source: "iana", - compressible: true - }, - "application/tei+xml": { - source: "iana", - compressible: true, - extensions: ["tei", "teicorpus"] - }, - "application/tetra_isi": { - source: "iana" - }, - "application/thraud+xml": { - source: "iana", - compressible: true, - extensions: ["tfi"] - }, - "application/timestamp-query": { - source: "iana" - }, - "application/timestamp-reply": { - source: "iana" - }, - "application/timestamped-data": { - source: "iana", - extensions: ["tsd"] - }, - "application/tlsrpt+gzip": { - source: "iana" - }, - "application/tlsrpt+json": { - source: "iana", - compressible: true - }, - "application/tnauthlist": { - source: "iana" - }, - "application/token-introspection+jwt": { - source: "iana" - }, - "application/toml": { - compressible: true, - extensions: ["toml"] - }, - "application/trickle-ice-sdpfrag": { - source: "iana" - }, - "application/trig": { - source: "iana", - extensions: ["trig"] - }, - "application/ttml+xml": { - source: "iana", - compressible: true, - extensions: ["ttml"] - }, - "application/tve-trigger": { - source: "iana" - }, - "application/tzif": { - source: "iana" - }, - "application/tzif-leap": { - source: "iana" - }, - "application/ubjson": { - compressible: false, - extensions: ["ubj"] - }, - "application/ulpfec": { - source: "iana" - }, - "application/urc-grpsheet+xml": { - source: "iana", - compressible: true - }, - "application/urc-ressheet+xml": { - source: "iana", - compressible: true, - extensions: ["rsheet"] - }, - "application/urc-targetdesc+xml": { - source: "iana", - compressible: true, - extensions: ["td"] - }, - "application/urc-uisocketdesc+xml": { - source: "iana", - compressible: true - }, - "application/vcard+json": { - source: "iana", - compressible: true - }, - "application/vcard+xml": { - source: "iana", - compressible: true - }, - "application/vemmi": { - source: "iana" - }, - "application/vividence.scriptfile": { - source: "apache" - }, - "application/vnd.1000minds.decision-model+xml": { - source: "iana", - compressible: true, - extensions: ["1km"] - }, - "application/vnd.3gpp-prose+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp-prose-pc3ch+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp-v2x-local-service-information": { - source: "iana" - }, - "application/vnd.3gpp.5gnas": { - source: "iana" - }, - "application/vnd.3gpp.access-transfer-events+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.bsf+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.gmop+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.gtpc": { - source: "iana" - }, - "application/vnd.3gpp.interworking-data": { - source: "iana" - }, - "application/vnd.3gpp.lpp": { - source: "iana" - }, - "application/vnd.3gpp.mc-signalling-ear": { - source: "iana" - }, - "application/vnd.3gpp.mcdata-affiliation-command+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcdata-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcdata-payload": { - source: "iana" - }, - "application/vnd.3gpp.mcdata-service-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcdata-signalling": { - source: "iana" - }, - "application/vnd.3gpp.mcdata-ue-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcdata-user-profile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-affiliation-command+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-floor-request+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-location-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-service-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-signed+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-ue-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-ue-init-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcptt-user-profile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-affiliation-command+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-affiliation-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-location-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-service-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-transmission-request+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-ue-config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mcvideo-user-profile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.mid-call+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.ngap": { - source: "iana" - }, - "application/vnd.3gpp.pfcp": { - source: "iana" - }, - "application/vnd.3gpp.pic-bw-large": { - source: "iana", - extensions: ["plb"] - }, - "application/vnd.3gpp.pic-bw-small": { - source: "iana", - extensions: ["psb"] - }, - "application/vnd.3gpp.pic-bw-var": { - source: "iana", - extensions: ["pvb"] - }, - "application/vnd.3gpp.s1ap": { - source: "iana" - }, - "application/vnd.3gpp.sms": { - source: "iana" - }, - "application/vnd.3gpp.sms+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.srvcc-ext+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.srvcc-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.state-and-event-info+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp.ussd+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp2.bcmcsinfo+xml": { - source: "iana", - compressible: true - }, - "application/vnd.3gpp2.sms": { - source: "iana" - }, - "application/vnd.3gpp2.tcap": { - source: "iana", - extensions: ["tcap"] - }, - "application/vnd.3lightssoftware.imagescal": { - source: "iana" - }, - "application/vnd.3m.post-it-notes": { - source: "iana", - extensions: ["pwn"] - }, - "application/vnd.accpac.simply.aso": { - source: "iana", - extensions: ["aso"] - }, - "application/vnd.accpac.simply.imp": { - source: "iana", - extensions: ["imp"] - }, - "application/vnd.acucobol": { - source: "iana", - extensions: ["acu"] - }, - "application/vnd.acucorp": { - source: "iana", - extensions: ["atc", "acutc"] - }, - "application/vnd.adobe.air-application-installer-package+zip": { - source: "apache", - compressible: false, - extensions: ["air"] - }, - "application/vnd.adobe.flash.movie": { - source: "iana" - }, - "application/vnd.adobe.formscentral.fcdt": { - source: "iana", - extensions: ["fcdt"] - }, - "application/vnd.adobe.fxp": { - source: "iana", - extensions: ["fxp", "fxpl"] - }, - "application/vnd.adobe.partial-upload": { - source: "iana" - }, - "application/vnd.adobe.xdp+xml": { - source: "iana", - compressible: true, - extensions: ["xdp"] - }, - "application/vnd.adobe.xfdf": { - source: "iana", - extensions: ["xfdf"] - }, - "application/vnd.aether.imp": { - source: "iana" - }, - "application/vnd.afpc.afplinedata": { - source: "iana" - }, - "application/vnd.afpc.afplinedata-pagedef": { - source: "iana" - }, - "application/vnd.afpc.cmoca-cmresource": { - source: "iana" - }, - "application/vnd.afpc.foca-charset": { - source: "iana" - }, - "application/vnd.afpc.foca-codedfont": { - source: "iana" - }, - "application/vnd.afpc.foca-codepage": { - source: "iana" - }, - "application/vnd.afpc.modca": { - source: "iana" - }, - "application/vnd.afpc.modca-cmtable": { - source: "iana" - }, - "application/vnd.afpc.modca-formdef": { - source: "iana" - }, - "application/vnd.afpc.modca-mediummap": { - source: "iana" - }, - "application/vnd.afpc.modca-objectcontainer": { - source: "iana" - }, - "application/vnd.afpc.modca-overlay": { - source: "iana" - }, - "application/vnd.afpc.modca-pagesegment": { - source: "iana" - }, - "application/vnd.age": { - source: "iana", - extensions: ["age"] - }, - "application/vnd.ah-barcode": { - source: "iana" - }, - "application/vnd.ahead.space": { - source: "iana", - extensions: ["ahead"] - }, - "application/vnd.airzip.filesecure.azf": { - source: "iana", - extensions: ["azf"] - }, - "application/vnd.airzip.filesecure.azs": { - source: "iana", - extensions: ["azs"] - }, - "application/vnd.amadeus+json": { - source: "iana", - compressible: true - }, - "application/vnd.amazon.ebook": { - source: "apache", - extensions: ["azw"] - }, - "application/vnd.amazon.mobi8-ebook": { - source: "iana" - }, - "application/vnd.americandynamics.acc": { - source: "iana", - extensions: ["acc"] - }, - "application/vnd.amiga.ami": { - source: "iana", - extensions: ["ami"] - }, - "application/vnd.amundsen.maze+xml": { - source: "iana", - compressible: true - }, - "application/vnd.android.ota": { - source: "iana" - }, - "application/vnd.android.package-archive": { - source: "apache", - compressible: false, - extensions: ["apk"] - }, - "application/vnd.anki": { - source: "iana" - }, - "application/vnd.anser-web-certificate-issue-initiation": { - source: "iana", - extensions: ["cii"] - }, - "application/vnd.anser-web-funds-transfer-initiation": { - source: "apache", - extensions: ["fti"] - }, - "application/vnd.antix.game-component": { - source: "iana", - extensions: ["atx"] - }, - "application/vnd.apache.arrow.file": { - source: "iana" - }, - "application/vnd.apache.arrow.stream": { - source: "iana" - }, - "application/vnd.apache.thrift.binary": { - source: "iana" - }, - "application/vnd.apache.thrift.compact": { - source: "iana" - }, - "application/vnd.apache.thrift.json": { - source: "iana" - }, - "application/vnd.api+json": { - source: "iana", - compressible: true - }, - "application/vnd.aplextor.warrp+json": { - source: "iana", - compressible: true - }, - "application/vnd.apothekende.reservation+json": { - source: "iana", - compressible: true - }, - "application/vnd.apple.installer+xml": { - source: "iana", - compressible: true, - extensions: ["mpkg"] - }, - "application/vnd.apple.keynote": { - source: "iana", - extensions: ["key"] - }, - "application/vnd.apple.mpegurl": { - source: "iana", - extensions: ["m3u8"] - }, - "application/vnd.apple.numbers": { - source: "iana", - extensions: ["numbers"] - }, - "application/vnd.apple.pages": { - source: "iana", - extensions: ["pages"] - }, - "application/vnd.apple.pkpass": { - compressible: false, - extensions: ["pkpass"] - }, - "application/vnd.arastra.swi": { - source: "iana" - }, - "application/vnd.aristanetworks.swi": { - source: "iana", - extensions: ["swi"] - }, - "application/vnd.artisan+json": { - source: "iana", - compressible: true - }, - "application/vnd.artsquare": { - source: "iana" - }, - "application/vnd.astraea-software.iota": { - source: "iana", - extensions: ["iota"] - }, - "application/vnd.audiograph": { - source: "iana", - extensions: ["aep"] - }, - "application/vnd.autopackage": { - source: "iana" - }, - "application/vnd.avalon+json": { - source: "iana", - compressible: true - }, - "application/vnd.avistar+xml": { - source: "iana", - compressible: true - }, - "application/vnd.balsamiq.bmml+xml": { - source: "iana", - compressible: true, - extensions: ["bmml"] - }, - "application/vnd.balsamiq.bmpr": { - source: "iana" - }, - "application/vnd.banana-accounting": { - source: "iana" - }, - "application/vnd.bbf.usp.error": { - source: "iana" - }, - "application/vnd.bbf.usp.msg": { - source: "iana" - }, - "application/vnd.bbf.usp.msg+json": { - source: "iana", - compressible: true - }, - "application/vnd.bekitzur-stech+json": { - source: "iana", - compressible: true - }, - "application/vnd.bint.med-content": { - source: "iana" - }, - "application/vnd.biopax.rdf+xml": { - source: "iana", - compressible: true - }, - "application/vnd.blink-idb-value-wrapper": { - source: "iana" - }, - "application/vnd.blueice.multipass": { - source: "iana", - extensions: ["mpm"] - }, - "application/vnd.bluetooth.ep.oob": { - source: "iana" - }, - "application/vnd.bluetooth.le.oob": { - source: "iana" - }, - "application/vnd.bmi": { - source: "iana", - extensions: ["bmi"] - }, - "application/vnd.bpf": { - source: "iana" - }, - "application/vnd.bpf3": { - source: "iana" - }, - "application/vnd.businessobjects": { - source: "iana", - extensions: ["rep"] - }, - "application/vnd.byu.uapi+json": { - source: "iana", - compressible: true - }, - "application/vnd.cab-jscript": { - source: "iana" - }, - "application/vnd.canon-cpdl": { - source: "iana" - }, - "application/vnd.canon-lips": { - source: "iana" - }, - "application/vnd.capasystems-pg+json": { - source: "iana", - compressible: true - }, - "application/vnd.cendio.thinlinc.clientconf": { - source: "iana" - }, - "application/vnd.century-systems.tcp_stream": { - source: "iana" - }, - "application/vnd.chemdraw+xml": { - source: "iana", - compressible: true, - extensions: ["cdxml"] - }, - "application/vnd.chess-pgn": { - source: "iana" - }, - "application/vnd.chipnuts.karaoke-mmd": { - source: "iana", - extensions: ["mmd"] - }, - "application/vnd.ciedi": { - source: "iana" - }, - "application/vnd.cinderella": { - source: "iana", - extensions: ["cdy"] - }, - "application/vnd.cirpack.isdn-ext": { - source: "iana" - }, - "application/vnd.citationstyles.style+xml": { - source: "iana", - compressible: true, - extensions: ["csl"] - }, - "application/vnd.claymore": { - source: "iana", - extensions: ["cla"] - }, - "application/vnd.cloanto.rp9": { - source: "iana", - extensions: ["rp9"] - }, - "application/vnd.clonk.c4group": { - source: "iana", - extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] - }, - "application/vnd.cluetrust.cartomobile-config": { - source: "iana", - extensions: ["c11amc"] - }, - "application/vnd.cluetrust.cartomobile-config-pkg": { - source: "iana", - extensions: ["c11amz"] - }, - "application/vnd.coffeescript": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.document": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.document-template": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.presentation": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.presentation-template": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet": { - source: "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet-template": { - source: "iana" - }, - "application/vnd.collection+json": { - source: "iana", - compressible: true - }, - "application/vnd.collection.doc+json": { - source: "iana", - compressible: true - }, - "application/vnd.collection.next+json": { - source: "iana", - compressible: true - }, - "application/vnd.comicbook+zip": { - source: "iana", - compressible: false - }, - "application/vnd.comicbook-rar": { - source: "iana" - }, - "application/vnd.commerce-battelle": { - source: "iana" - }, - "application/vnd.commonspace": { - source: "iana", - extensions: ["csp"] - }, - "application/vnd.contact.cmsg": { - source: "iana", - extensions: ["cdbcmsg"] - }, - "application/vnd.coreos.ignition+json": { - source: "iana", - compressible: true - }, - "application/vnd.cosmocaller": { - source: "iana", - extensions: ["cmc"] - }, - "application/vnd.crick.clicker": { - source: "iana", - extensions: ["clkx"] - }, - "application/vnd.crick.clicker.keyboard": { - source: "iana", - extensions: ["clkk"] - }, - "application/vnd.crick.clicker.palette": { - source: "iana", - extensions: ["clkp"] - }, - "application/vnd.crick.clicker.template": { - source: "iana", - extensions: ["clkt"] - }, - "application/vnd.crick.clicker.wordbank": { - source: "iana", - extensions: ["clkw"] - }, - "application/vnd.criticaltools.wbs+xml": { - source: "iana", - compressible: true, - extensions: ["wbs"] - }, - "application/vnd.cryptii.pipe+json": { - source: "iana", - compressible: true - }, - "application/vnd.crypto-shade-file": { - source: "iana" - }, - "application/vnd.cryptomator.encrypted": { - source: "iana" - }, - "application/vnd.cryptomator.vault": { - source: "iana" - }, - "application/vnd.ctc-posml": { - source: "iana", - extensions: ["pml"] - }, - "application/vnd.ctct.ws+xml": { - source: "iana", - compressible: true - }, - "application/vnd.cups-pdf": { - source: "iana" - }, - "application/vnd.cups-postscript": { - source: "iana" - }, - "application/vnd.cups-ppd": { - source: "iana", - extensions: ["ppd"] - }, - "application/vnd.cups-raster": { - source: "iana" - }, - "application/vnd.cups-raw": { - source: "iana" - }, - "application/vnd.curl": { - source: "iana" - }, - "application/vnd.curl.car": { - source: "apache", - extensions: ["car"] - }, - "application/vnd.curl.pcurl": { - source: "apache", - extensions: ["pcurl"] - }, - "application/vnd.cyan.dean.root+xml": { - source: "iana", - compressible: true - }, - "application/vnd.cybank": { - source: "iana" - }, - "application/vnd.cyclonedx+json": { - source: "iana", - compressible: true - }, - "application/vnd.cyclonedx+xml": { - source: "iana", - compressible: true - }, - "application/vnd.d2l.coursepackage1p0+zip": { - source: "iana", - compressible: false - }, - "application/vnd.d3m-dataset": { - source: "iana" - }, - "application/vnd.d3m-problem": { - source: "iana" - }, - "application/vnd.dart": { - source: "iana", - compressible: true, - extensions: ["dart"] - }, - "application/vnd.data-vision.rdz": { - source: "iana", - extensions: ["rdz"] - }, - "application/vnd.datapackage+json": { - source: "iana", - compressible: true - }, - "application/vnd.dataresource+json": { - source: "iana", - compressible: true - }, - "application/vnd.dbf": { - source: "iana", - extensions: ["dbf"] - }, - "application/vnd.debian.binary-package": { - source: "iana" - }, - "application/vnd.dece.data": { - source: "iana", - extensions: ["uvf", "uvvf", "uvd", "uvvd"] - }, - "application/vnd.dece.ttml+xml": { - source: "iana", - compressible: true, - extensions: ["uvt", "uvvt"] - }, - "application/vnd.dece.unspecified": { - source: "iana", - extensions: ["uvx", "uvvx"] - }, - "application/vnd.dece.zip": { - source: "iana", - extensions: ["uvz", "uvvz"] - }, - "application/vnd.denovo.fcselayout-link": { - source: "iana", - extensions: ["fe_launch"] - }, - "application/vnd.desmume.movie": { - source: "iana" - }, - "application/vnd.dir-bi.plate-dl-nosuffix": { - source: "iana" - }, - "application/vnd.dm.delegation+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dna": { - source: "iana", - extensions: ["dna"] - }, - "application/vnd.document+json": { - source: "iana", - compressible: true - }, - "application/vnd.dolby.mlp": { - source: "apache", - extensions: ["mlp"] - }, - "application/vnd.dolby.mobile.1": { - source: "iana" - }, - "application/vnd.dolby.mobile.2": { - source: "iana" - }, - "application/vnd.doremir.scorecloud-binary-document": { - source: "iana" - }, - "application/vnd.dpgraph": { - source: "iana", - extensions: ["dpg"] - }, - "application/vnd.dreamfactory": { - source: "iana", - extensions: ["dfac"] - }, - "application/vnd.drive+json": { - source: "iana", - compressible: true - }, - "application/vnd.ds-keypoint": { - source: "apache", - extensions: ["kpxx"] - }, - "application/vnd.dtg.local": { - source: "iana" - }, - "application/vnd.dtg.local.flash": { - source: "iana" - }, - "application/vnd.dtg.local.html": { - source: "iana" - }, - "application/vnd.dvb.ait": { - source: "iana", - extensions: ["ait"] - }, - "application/vnd.dvb.dvbisl+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.dvbj": { - source: "iana" - }, - "application/vnd.dvb.esgcontainer": { - source: "iana" - }, - "application/vnd.dvb.ipdcdftnotifaccess": { - source: "iana" - }, - "application/vnd.dvb.ipdcesgaccess": { - source: "iana" - }, - "application/vnd.dvb.ipdcesgaccess2": { - source: "iana" - }, - "application/vnd.dvb.ipdcesgpdd": { - source: "iana" - }, - "application/vnd.dvb.ipdcroaming": { - source: "iana" - }, - "application/vnd.dvb.iptv.alfec-base": { - source: "iana" - }, - "application/vnd.dvb.iptv.alfec-enhancement": { - source: "iana" - }, - "application/vnd.dvb.notif-aggregate-root+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-container+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-generic+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-ia-msglist+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-ia-registration-request+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-ia-registration-response+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.notif-init+xml": { - source: "iana", - compressible: true - }, - "application/vnd.dvb.pfr": { - source: "iana" - }, - "application/vnd.dvb.service": { - source: "iana", - extensions: ["svc"] - }, - "application/vnd.dxr": { - source: "iana" - }, - "application/vnd.dynageo": { - source: "iana", - extensions: ["geo"] - }, - "application/vnd.dzr": { - source: "iana" - }, - "application/vnd.easykaraoke.cdgdownload": { - source: "iana" - }, - "application/vnd.ecdis-update": { - source: "iana" - }, - "application/vnd.ecip.rlp": { - source: "iana" - }, - "application/vnd.eclipse.ditto+json": { - source: "iana", - compressible: true - }, - "application/vnd.ecowin.chart": { - source: "iana", - extensions: ["mag"] - }, - "application/vnd.ecowin.filerequest": { - source: "iana" - }, - "application/vnd.ecowin.fileupdate": { - source: "iana" - }, - "application/vnd.ecowin.series": { - source: "iana" - }, - "application/vnd.ecowin.seriesrequest": { - source: "iana" - }, - "application/vnd.ecowin.seriesupdate": { - source: "iana" - }, - "application/vnd.efi.img": { - source: "iana" - }, - "application/vnd.efi.iso": { - source: "iana" - }, - "application/vnd.emclient.accessrequest+xml": { - source: "iana", - compressible: true - }, - "application/vnd.enliven": { - source: "iana", - extensions: ["nml"] - }, - "application/vnd.enphase.envoy": { - source: "iana" - }, - "application/vnd.eprints.data+xml": { - source: "iana", - compressible: true - }, - "application/vnd.epson.esf": { - source: "iana", - extensions: ["esf"] - }, - "application/vnd.epson.msf": { - source: "iana", - extensions: ["msf"] - }, - "application/vnd.epson.quickanime": { - source: "iana", - extensions: ["qam"] - }, - "application/vnd.epson.salt": { - source: "iana", - extensions: ["slt"] - }, - "application/vnd.epson.ssf": { - source: "iana", - extensions: ["ssf"] - }, - "application/vnd.ericsson.quickcall": { - source: "iana" - }, - "application/vnd.espass-espass+zip": { - source: "iana", - compressible: false - }, - "application/vnd.eszigno3+xml": { - source: "iana", - compressible: true, - extensions: ["es3", "et3"] - }, - "application/vnd.etsi.aoc+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.asic-e+zip": { - source: "iana", - compressible: false - }, - "application/vnd.etsi.asic-s+zip": { - source: "iana", - compressible: false - }, - "application/vnd.etsi.cug+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvcommand+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvdiscovery+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvprofile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvsad-bc+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvsad-cod+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvsad-npvr+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvservice+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvsync+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.iptvueprofile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.mcid+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.mheg5": { - source: "iana" - }, - "application/vnd.etsi.overload-control-policy-dataset+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.pstn+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.sci+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.simservs+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.timestamp-token": { - source: "iana" - }, - "application/vnd.etsi.tsl+xml": { - source: "iana", - compressible: true - }, - "application/vnd.etsi.tsl.der": { - source: "iana" - }, - "application/vnd.eu.kasparian.car+json": { - source: "iana", - compressible: true - }, - "application/vnd.eudora.data": { - source: "iana" - }, - "application/vnd.evolv.ecig.profile": { - source: "iana" - }, - "application/vnd.evolv.ecig.settings": { - source: "iana" - }, - "application/vnd.evolv.ecig.theme": { - source: "iana" - }, - "application/vnd.exstream-empower+zip": { - source: "iana", - compressible: false - }, - "application/vnd.exstream-package": { - source: "iana" - }, - "application/vnd.ezpix-album": { - source: "iana", - extensions: ["ez2"] - }, - "application/vnd.ezpix-package": { - source: "iana", - extensions: ["ez3"] - }, - "application/vnd.f-secure.mobile": { - source: "iana" - }, - "application/vnd.familysearch.gedcom+zip": { - source: "iana", - compressible: false - }, - "application/vnd.fastcopy-disk-image": { - source: "iana" - }, - "application/vnd.fdf": { - source: "iana", - extensions: ["fdf"] - }, - "application/vnd.fdsn.mseed": { - source: "iana", - extensions: ["mseed"] - }, - "application/vnd.fdsn.seed": { - source: "iana", - extensions: ["seed", "dataless"] - }, - "application/vnd.ffsns": { - source: "iana" - }, - "application/vnd.ficlab.flb+zip": { - source: "iana", - compressible: false - }, - "application/vnd.filmit.zfc": { - source: "iana" - }, - "application/vnd.fints": { - source: "iana" - }, - "application/vnd.firemonkeys.cloudcell": { - source: "iana" - }, - "application/vnd.flographit": { - source: "iana", - extensions: ["gph"] - }, - "application/vnd.fluxtime.clip": { - source: "iana", - extensions: ["ftc"] - }, - "application/vnd.font-fontforge-sfd": { - source: "iana" - }, - "application/vnd.framemaker": { - source: "iana", - extensions: ["fm", "frame", "maker", "book"] - }, - "application/vnd.frogans.fnc": { - source: "iana", - extensions: ["fnc"] - }, - "application/vnd.frogans.ltf": { - source: "iana", - extensions: ["ltf"] - }, - "application/vnd.fsc.weblaunch": { - source: "iana", - extensions: ["fsc"] - }, - "application/vnd.fujifilm.fb.docuworks": { - source: "iana" - }, - "application/vnd.fujifilm.fb.docuworks.binder": { - source: "iana" - }, - "application/vnd.fujifilm.fb.docuworks.container": { - source: "iana" - }, - "application/vnd.fujifilm.fb.jfi+xml": { - source: "iana", - compressible: true - }, - "application/vnd.fujitsu.oasys": { - source: "iana", - extensions: ["oas"] - }, - "application/vnd.fujitsu.oasys2": { - source: "iana", - extensions: ["oa2"] - }, - "application/vnd.fujitsu.oasys3": { - source: "iana", - extensions: ["oa3"] - }, - "application/vnd.fujitsu.oasysgp": { - source: "iana", - extensions: ["fg5"] - }, - "application/vnd.fujitsu.oasysprs": { - source: "iana", - extensions: ["bh2"] - }, - "application/vnd.fujixerox.art-ex": { - source: "iana" - }, - "application/vnd.fujixerox.art4": { - source: "iana" - }, - "application/vnd.fujixerox.ddd": { - source: "iana", - extensions: ["ddd"] - }, - "application/vnd.fujixerox.docuworks": { - source: "iana", - extensions: ["xdw"] - }, - "application/vnd.fujixerox.docuworks.binder": { - source: "iana", - extensions: ["xbd"] - }, - "application/vnd.fujixerox.docuworks.container": { - source: "iana" - }, - "application/vnd.fujixerox.hbpl": { - source: "iana" - }, - "application/vnd.fut-misnet": { - source: "iana" - }, - "application/vnd.futoin+cbor": { - source: "iana" - }, - "application/vnd.futoin+json": { - source: "iana", - compressible: true - }, - "application/vnd.fuzzysheet": { - source: "iana", - extensions: ["fzs"] - }, - "application/vnd.genomatix.tuxedo": { - source: "iana", - extensions: ["txd"] - }, - "application/vnd.gentics.grd+json": { - source: "iana", - compressible: true - }, - "application/vnd.geo+json": { - source: "iana", - compressible: true - }, - "application/vnd.geocube+xml": { - source: "iana", - compressible: true - }, - "application/vnd.geogebra.file": { - source: "iana", - extensions: ["ggb"] - }, - "application/vnd.geogebra.slides": { - source: "iana" - }, - "application/vnd.geogebra.tool": { - source: "iana", - extensions: ["ggt"] - }, - "application/vnd.geometry-explorer": { - source: "iana", - extensions: ["gex", "gre"] - }, - "application/vnd.geonext": { - source: "iana", - extensions: ["gxt"] - }, - "application/vnd.geoplan": { - source: "iana", - extensions: ["g2w"] - }, - "application/vnd.geospace": { - source: "iana", - extensions: ["g3w"] - }, - "application/vnd.gerber": { - source: "iana" - }, - "application/vnd.globalplatform.card-content-mgt": { - source: "iana" - }, - "application/vnd.globalplatform.card-content-mgt-response": { - source: "iana" - }, - "application/vnd.gmx": { - source: "iana", - extensions: ["gmx"] - }, - "application/vnd.google-apps.document": { - compressible: false, - extensions: ["gdoc"] - }, - "application/vnd.google-apps.presentation": { - compressible: false, - extensions: ["gslides"] - }, - "application/vnd.google-apps.spreadsheet": { - compressible: false, - extensions: ["gsheet"] - }, - "application/vnd.google-earth.kml+xml": { - source: "iana", - compressible: true, - extensions: ["kml"] - }, - "application/vnd.google-earth.kmz": { - source: "iana", - compressible: false, - extensions: ["kmz"] - }, - "application/vnd.gov.sk.e-form+xml": { - source: "iana", - compressible: true - }, - "application/vnd.gov.sk.e-form+zip": { - source: "iana", - compressible: false - }, - "application/vnd.gov.sk.xmldatacontainer+xml": { - source: "iana", - compressible: true - }, - "application/vnd.grafeq": { - source: "iana", - extensions: ["gqf", "gqs"] - }, - "application/vnd.gridmp": { - source: "iana" - }, - "application/vnd.groove-account": { - source: "iana", - extensions: ["gac"] - }, - "application/vnd.groove-help": { - source: "iana", - extensions: ["ghf"] - }, - "application/vnd.groove-identity-message": { - source: "iana", - extensions: ["gim"] - }, - "application/vnd.groove-injector": { - source: "iana", - extensions: ["grv"] - }, - "application/vnd.groove-tool-message": { - source: "iana", - extensions: ["gtm"] - }, - "application/vnd.groove-tool-template": { - source: "iana", - extensions: ["tpl"] - }, - "application/vnd.groove-vcard": { - source: "iana", - extensions: ["vcg"] - }, - "application/vnd.hal+json": { - source: "iana", - compressible: true - }, - "application/vnd.hal+xml": { - source: "iana", - compressible: true, - extensions: ["hal"] - }, - "application/vnd.handheld-entertainment+xml": { - source: "iana", - compressible: true, - extensions: ["zmm"] - }, - "application/vnd.hbci": { - source: "iana", - extensions: ["hbci"] - }, - "application/vnd.hc+json": { - source: "iana", - compressible: true - }, - "application/vnd.hcl-bireports": { - source: "iana" - }, - "application/vnd.hdt": { - source: "iana" - }, - "application/vnd.heroku+json": { - source: "iana", - compressible: true - }, - "application/vnd.hhe.lesson-player": { - source: "iana", - extensions: ["les"] - }, - "application/vnd.hl7cda+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.hl7v2+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.hp-hpgl": { - source: "iana", - extensions: ["hpgl"] - }, - "application/vnd.hp-hpid": { - source: "iana", - extensions: ["hpid"] - }, - "application/vnd.hp-hps": { - source: "iana", - extensions: ["hps"] - }, - "application/vnd.hp-jlyt": { - source: "iana", - extensions: ["jlt"] - }, - "application/vnd.hp-pcl": { - source: "iana", - extensions: ["pcl"] - }, - "application/vnd.hp-pclxl": { - source: "iana", - extensions: ["pclxl"] - }, - "application/vnd.httphone": { - source: "iana" - }, - "application/vnd.hydrostatix.sof-data": { - source: "iana", - extensions: ["sfd-hdstx"] - }, - "application/vnd.hyper+json": { - source: "iana", - compressible: true - }, - "application/vnd.hyper-item+json": { - source: "iana", - compressible: true - }, - "application/vnd.hyperdrive+json": { - source: "iana", - compressible: true - }, - "application/vnd.hzn-3d-crossword": { - source: "iana" - }, - "application/vnd.ibm.afplinedata": { - source: "iana" - }, - "application/vnd.ibm.electronic-media": { - source: "iana" - }, - "application/vnd.ibm.minipay": { - source: "iana", - extensions: ["mpy"] - }, - "application/vnd.ibm.modcap": { - source: "iana", - extensions: ["afp", "listafp", "list3820"] - }, - "application/vnd.ibm.rights-management": { - source: "iana", - extensions: ["irm"] - }, - "application/vnd.ibm.secure-container": { - source: "iana", - extensions: ["sc"] - }, - "application/vnd.iccprofile": { - source: "iana", - extensions: ["icc", "icm"] - }, - "application/vnd.ieee.1905": { - source: "iana" - }, - "application/vnd.igloader": { - source: "iana", - extensions: ["igl"] - }, - "application/vnd.imagemeter.folder+zip": { - source: "iana", - compressible: false - }, - "application/vnd.imagemeter.image+zip": { - source: "iana", - compressible: false - }, - "application/vnd.immervision-ivp": { - source: "iana", - extensions: ["ivp"] - }, - "application/vnd.immervision-ivu": { - source: "iana", - extensions: ["ivu"] - }, - "application/vnd.ims.imsccv1p1": { - source: "iana" - }, - "application/vnd.ims.imsccv1p2": { - source: "iana" - }, - "application/vnd.ims.imsccv1p3": { - source: "iana" - }, - "application/vnd.ims.lis.v2.result+json": { - source: "iana", - compressible: true - }, - "application/vnd.ims.lti.v2.toolconsumerprofile+json": { - source: "iana", - compressible: true - }, - "application/vnd.ims.lti.v2.toolproxy+json": { - source: "iana", - compressible: true - }, - "application/vnd.ims.lti.v2.toolproxy.id+json": { - source: "iana", - compressible: true - }, - "application/vnd.ims.lti.v2.toolsettings+json": { - source: "iana", - compressible: true - }, - "application/vnd.ims.lti.v2.toolsettings.simple+json": { - source: "iana", - compressible: true - }, - "application/vnd.informedcontrol.rms+xml": { - source: "iana", - compressible: true - }, - "application/vnd.informix-visionary": { - source: "iana" - }, - "application/vnd.infotech.project": { - source: "iana" - }, - "application/vnd.infotech.project+xml": { - source: "iana", - compressible: true - }, - "application/vnd.innopath.wamp.notification": { - source: "iana" - }, - "application/vnd.insors.igm": { - source: "iana", - extensions: ["igm"] - }, - "application/vnd.intercon.formnet": { - source: "iana", - extensions: ["xpw", "xpx"] - }, - "application/vnd.intergeo": { - source: "iana", - extensions: ["i2g"] - }, - "application/vnd.intertrust.digibox": { - source: "iana" - }, - "application/vnd.intertrust.nncp": { - source: "iana" - }, - "application/vnd.intu.qbo": { - source: "iana", - extensions: ["qbo"] - }, - "application/vnd.intu.qfx": { - source: "iana", - extensions: ["qfx"] - }, - "application/vnd.iptc.g2.catalogitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.conceptitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.knowledgeitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.newsitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.newsmessage+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.packageitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.iptc.g2.planningitem+xml": { - source: "iana", - compressible: true - }, - "application/vnd.ipunplugged.rcprofile": { - source: "iana", - extensions: ["rcprofile"] - }, - "application/vnd.irepository.package+xml": { - source: "iana", - compressible: true, - extensions: ["irp"] - }, - "application/vnd.is-xpr": { - source: "iana", - extensions: ["xpr"] - }, - "application/vnd.isac.fcs": { - source: "iana", - extensions: ["fcs"] - }, - "application/vnd.iso11783-10+zip": { - source: "iana", - compressible: false - }, - "application/vnd.jam": { - source: "iana", - extensions: ["jam"] - }, - "application/vnd.japannet-directory-service": { - source: "iana" - }, - "application/vnd.japannet-jpnstore-wakeup": { - source: "iana" - }, - "application/vnd.japannet-payment-wakeup": { - source: "iana" - }, - "application/vnd.japannet-registration": { - source: "iana" - }, - "application/vnd.japannet-registration-wakeup": { - source: "iana" - }, - "application/vnd.japannet-setstore-wakeup": { - source: "iana" - }, - "application/vnd.japannet-verification": { - source: "iana" - }, - "application/vnd.japannet-verification-wakeup": { - source: "iana" - }, - "application/vnd.jcp.javame.midlet-rms": { - source: "iana", - extensions: ["rms"] - }, - "application/vnd.jisp": { - source: "iana", - extensions: ["jisp"] - }, - "application/vnd.joost.joda-archive": { - source: "iana", - extensions: ["joda"] - }, - "application/vnd.jsk.isdn-ngn": { - source: "iana" - }, - "application/vnd.kahootz": { - source: "iana", - extensions: ["ktz", "ktr"] - }, - "application/vnd.kde.karbon": { - source: "iana", - extensions: ["karbon"] - }, - "application/vnd.kde.kchart": { - source: "iana", - extensions: ["chrt"] - }, - "application/vnd.kde.kformula": { - source: "iana", - extensions: ["kfo"] - }, - "application/vnd.kde.kivio": { - source: "iana", - extensions: ["flw"] - }, - "application/vnd.kde.kontour": { - source: "iana", - extensions: ["kon"] - }, - "application/vnd.kde.kpresenter": { - source: "iana", - extensions: ["kpr", "kpt"] - }, - "application/vnd.kde.kspread": { - source: "iana", - extensions: ["ksp"] - }, - "application/vnd.kde.kword": { - source: "iana", - extensions: ["kwd", "kwt"] - }, - "application/vnd.kenameaapp": { - source: "iana", - extensions: ["htke"] - }, - "application/vnd.kidspiration": { - source: "iana", - extensions: ["kia"] - }, - "application/vnd.kinar": { - source: "iana", - extensions: ["kne", "knp"] - }, - "application/vnd.koan": { - source: "iana", - extensions: ["skp", "skd", "skt", "skm"] - }, - "application/vnd.kodak-descriptor": { - source: "iana", - extensions: ["sse"] - }, - "application/vnd.las": { - source: "iana" - }, - "application/vnd.las.las+json": { - source: "iana", - compressible: true - }, - "application/vnd.las.las+xml": { - source: "iana", - compressible: true, - extensions: ["lasxml"] - }, - "application/vnd.laszip": { - source: "iana" - }, - "application/vnd.leap+json": { - source: "iana", - compressible: true - }, - "application/vnd.liberty-request+xml": { - source: "iana", - compressible: true - }, - "application/vnd.llamagraphics.life-balance.desktop": { - source: "iana", - extensions: ["lbd"] - }, - "application/vnd.llamagraphics.life-balance.exchange+xml": { - source: "iana", - compressible: true, - extensions: ["lbe"] - }, - "application/vnd.logipipe.circuit+zip": { - source: "iana", - compressible: false - }, - "application/vnd.loom": { - source: "iana" - }, - "application/vnd.lotus-1-2-3": { - source: "iana", - extensions: ["123"] - }, - "application/vnd.lotus-approach": { - source: "iana", - extensions: ["apr"] - }, - "application/vnd.lotus-freelance": { - source: "iana", - extensions: ["pre"] - }, - "application/vnd.lotus-notes": { - source: "iana", - extensions: ["nsf"] - }, - "application/vnd.lotus-organizer": { - source: "iana", - extensions: ["org"] - }, - "application/vnd.lotus-screencam": { - source: "iana", - extensions: ["scm"] - }, - "application/vnd.lotus-wordpro": { - source: "iana", - extensions: ["lwp"] - }, - "application/vnd.macports.portpkg": { - source: "iana", - extensions: ["portpkg"] - }, - "application/vnd.mapbox-vector-tile": { - source: "iana", - extensions: ["mvt"] - }, - "application/vnd.marlin.drm.actiontoken+xml": { - source: "iana", - compressible: true - }, - "application/vnd.marlin.drm.conftoken+xml": { - source: "iana", - compressible: true - }, - "application/vnd.marlin.drm.license+xml": { - source: "iana", - compressible: true - }, - "application/vnd.marlin.drm.mdcf": { - source: "iana" - }, - "application/vnd.mason+json": { - source: "iana", - compressible: true - }, - "application/vnd.maxar.archive.3tz+zip": { - source: "iana", - compressible: false - }, - "application/vnd.maxmind.maxmind-db": { - source: "iana" - }, - "application/vnd.mcd": { - source: "iana", - extensions: ["mcd"] - }, - "application/vnd.medcalcdata": { - source: "iana", - extensions: ["mc1"] - }, - "application/vnd.mediastation.cdkey": { - source: "iana", - extensions: ["cdkey"] - }, - "application/vnd.meridian-slingshot": { - source: "iana" - }, - "application/vnd.mfer": { - source: "iana", - extensions: ["mwf"] - }, - "application/vnd.mfmp": { - source: "iana", - extensions: ["mfm"] - }, - "application/vnd.micro+json": { - source: "iana", - compressible: true - }, - "application/vnd.micrografx.flo": { - source: "iana", - extensions: ["flo"] - }, - "application/vnd.micrografx.igx": { - source: "iana", - extensions: ["igx"] - }, - "application/vnd.microsoft.portable-executable": { - source: "iana" - }, - "application/vnd.microsoft.windows.thumbnail-cache": { - source: "iana" - }, - "application/vnd.miele+json": { - source: "iana", - compressible: true - }, - "application/vnd.mif": { - source: "iana", - extensions: ["mif"] - }, - "application/vnd.minisoft-hp3000-save": { - source: "iana" - }, - "application/vnd.mitsubishi.misty-guard.trustweb": { - source: "iana" - }, - "application/vnd.mobius.daf": { - source: "iana", - extensions: ["daf"] - }, - "application/vnd.mobius.dis": { - source: "iana", - extensions: ["dis"] - }, - "application/vnd.mobius.mbk": { - source: "iana", - extensions: ["mbk"] - }, - "application/vnd.mobius.mqy": { - source: "iana", - extensions: ["mqy"] - }, - "application/vnd.mobius.msl": { - source: "iana", - extensions: ["msl"] - }, - "application/vnd.mobius.plc": { - source: "iana", - extensions: ["plc"] - }, - "application/vnd.mobius.txf": { - source: "iana", - extensions: ["txf"] - }, - "application/vnd.mophun.application": { - source: "iana", - extensions: ["mpn"] - }, - "application/vnd.mophun.certificate": { - source: "iana", - extensions: ["mpc"] - }, - "application/vnd.motorola.flexsuite": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.adsi": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.fis": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.gotap": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.kmr": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.ttc": { - source: "iana" - }, - "application/vnd.motorola.flexsuite.wem": { - source: "iana" - }, - "application/vnd.motorola.iprm": { - source: "iana" - }, - "application/vnd.mozilla.xul+xml": { - source: "iana", - compressible: true, - extensions: ["xul"] - }, - "application/vnd.ms-3mfdocument": { - source: "iana" - }, - "application/vnd.ms-artgalry": { - source: "iana", - extensions: ["cil"] - }, - "application/vnd.ms-asf": { - source: "iana" - }, - "application/vnd.ms-cab-compressed": { - source: "iana", - extensions: ["cab"] - }, - "application/vnd.ms-color.iccprofile": { - source: "apache" - }, - "application/vnd.ms-excel": { - source: "iana", - compressible: false, - extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] - }, - "application/vnd.ms-excel.addin.macroenabled.12": { - source: "iana", - extensions: ["xlam"] - }, - "application/vnd.ms-excel.sheet.binary.macroenabled.12": { - source: "iana", - extensions: ["xlsb"] - }, - "application/vnd.ms-excel.sheet.macroenabled.12": { - source: "iana", - extensions: ["xlsm"] - }, - "application/vnd.ms-excel.template.macroenabled.12": { - source: "iana", - extensions: ["xltm"] - }, - "application/vnd.ms-fontobject": { - source: "iana", - compressible: true, - extensions: ["eot"] - }, - "application/vnd.ms-htmlhelp": { - source: "iana", - extensions: ["chm"] - }, - "application/vnd.ms-ims": { - source: "iana", - extensions: ["ims"] - }, - "application/vnd.ms-lrm": { - source: "iana", - extensions: ["lrm"] - }, - "application/vnd.ms-office.activex+xml": { - source: "iana", - compressible: true - }, - "application/vnd.ms-officetheme": { - source: "iana", - extensions: ["thmx"] - }, - "application/vnd.ms-opentype": { - source: "apache", - compressible: true - }, - "application/vnd.ms-outlook": { - compressible: false, - extensions: ["msg"] - }, - "application/vnd.ms-package.obfuscated-opentype": { - source: "apache" - }, - "application/vnd.ms-pki.seccat": { - source: "apache", - extensions: ["cat"] - }, - "application/vnd.ms-pki.stl": { - source: "apache", - extensions: ["stl"] - }, - "application/vnd.ms-playready.initiator+xml": { - source: "iana", - compressible: true - }, - "application/vnd.ms-powerpoint": { - source: "iana", - compressible: false, - extensions: ["ppt", "pps", "pot"] - }, - "application/vnd.ms-powerpoint.addin.macroenabled.12": { - source: "iana", - extensions: ["ppam"] - }, - "application/vnd.ms-powerpoint.presentation.macroenabled.12": { - source: "iana", - extensions: ["pptm"] - }, - "application/vnd.ms-powerpoint.slide.macroenabled.12": { - source: "iana", - extensions: ["sldm"] - }, - "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { - source: "iana", - extensions: ["ppsm"] - }, - "application/vnd.ms-powerpoint.template.macroenabled.12": { - source: "iana", - extensions: ["potm"] - }, - "application/vnd.ms-printdevicecapabilities+xml": { - source: "iana", - compressible: true - }, - "application/vnd.ms-printing.printticket+xml": { - source: "apache", - compressible: true - }, - "application/vnd.ms-printschematicket+xml": { - source: "iana", - compressible: true - }, - "application/vnd.ms-project": { - source: "iana", - extensions: ["mpp", "mpt"] - }, - "application/vnd.ms-tnef": { - source: "iana" - }, - "application/vnd.ms-windows.devicepairing": { - source: "iana" - }, - "application/vnd.ms-windows.nwprinting.oob": { - source: "iana" - }, - "application/vnd.ms-windows.printerpairing": { - source: "iana" - }, - "application/vnd.ms-windows.wsd.oob": { - source: "iana" - }, - "application/vnd.ms-wmdrm.lic-chlg-req": { - source: "iana" - }, - "application/vnd.ms-wmdrm.lic-resp": { - source: "iana" - }, - "application/vnd.ms-wmdrm.meter-chlg-req": { - source: "iana" - }, - "application/vnd.ms-wmdrm.meter-resp": { - source: "iana" - }, - "application/vnd.ms-word.document.macroenabled.12": { - source: "iana", - extensions: ["docm"] - }, - "application/vnd.ms-word.template.macroenabled.12": { - source: "iana", - extensions: ["dotm"] - }, - "application/vnd.ms-works": { - source: "iana", - extensions: ["wps", "wks", "wcm", "wdb"] - }, - "application/vnd.ms-wpl": { - source: "iana", - extensions: ["wpl"] - }, - "application/vnd.ms-xpsdocument": { - source: "iana", - compressible: false, - extensions: ["xps"] - }, - "application/vnd.msa-disk-image": { - source: "iana" - }, - "application/vnd.mseq": { - source: "iana", - extensions: ["mseq"] - }, - "application/vnd.msign": { - source: "iana" - }, - "application/vnd.multiad.creator": { - source: "iana" - }, - "application/vnd.multiad.creator.cif": { - source: "iana" - }, - "application/vnd.music-niff": { - source: "iana" - }, - "application/vnd.musician": { - source: "iana", - extensions: ["mus"] - }, - "application/vnd.muvee.style": { - source: "iana", - extensions: ["msty"] - }, - "application/vnd.mynfc": { - source: "iana", - extensions: ["taglet"] - }, - "application/vnd.nacamar.ybrid+json": { - source: "iana", - compressible: true - }, - "application/vnd.ncd.control": { - source: "iana" - }, - "application/vnd.ncd.reference": { - source: "iana" - }, - "application/vnd.nearst.inv+json": { - source: "iana", - compressible: true - }, - "application/vnd.nebumind.line": { - source: "iana" - }, - "application/vnd.nervana": { - source: "iana" - }, - "application/vnd.netfpx": { - source: "iana" - }, - "application/vnd.neurolanguage.nlu": { - source: "iana", - extensions: ["nlu"] - }, - "application/vnd.nimn": { - source: "iana" - }, - "application/vnd.nintendo.nitro.rom": { - source: "iana" - }, - "application/vnd.nintendo.snes.rom": { - source: "iana" - }, - "application/vnd.nitf": { - source: "iana", - extensions: ["ntf", "nitf"] - }, - "application/vnd.noblenet-directory": { - source: "iana", - extensions: ["nnd"] - }, - "application/vnd.noblenet-sealer": { - source: "iana", - extensions: ["nns"] - }, - "application/vnd.noblenet-web": { - source: "iana", - extensions: ["nnw"] - }, - "application/vnd.nokia.catalogs": { - source: "iana" - }, - "application/vnd.nokia.conml+wbxml": { - source: "iana" - }, - "application/vnd.nokia.conml+xml": { - source: "iana", - compressible: true - }, - "application/vnd.nokia.iptv.config+xml": { - source: "iana", - compressible: true - }, - "application/vnd.nokia.isds-radio-presets": { - source: "iana" - }, - "application/vnd.nokia.landmark+wbxml": { - source: "iana" - }, - "application/vnd.nokia.landmark+xml": { - source: "iana", - compressible: true - }, - "application/vnd.nokia.landmarkcollection+xml": { - source: "iana", - compressible: true - }, - "application/vnd.nokia.n-gage.ac+xml": { - source: "iana", - compressible: true, - extensions: ["ac"] - }, - "application/vnd.nokia.n-gage.data": { - source: "iana", - extensions: ["ngdat"] - }, - "application/vnd.nokia.n-gage.symbian.install": { - source: "iana", - extensions: ["n-gage"] - }, - "application/vnd.nokia.ncd": { - source: "iana" - }, - "application/vnd.nokia.pcd+wbxml": { - source: "iana" - }, - "application/vnd.nokia.pcd+xml": { - source: "iana", - compressible: true - }, - "application/vnd.nokia.radio-preset": { - source: "iana", - extensions: ["rpst"] - }, - "application/vnd.nokia.radio-presets": { - source: "iana", - extensions: ["rpss"] - }, - "application/vnd.novadigm.edm": { - source: "iana", - extensions: ["edm"] - }, - "application/vnd.novadigm.edx": { - source: "iana", - extensions: ["edx"] - }, - "application/vnd.novadigm.ext": { - source: "iana", - extensions: ["ext"] - }, - "application/vnd.ntt-local.content-share": { - source: "iana" - }, - "application/vnd.ntt-local.file-transfer": { - source: "iana" - }, - "application/vnd.ntt-local.ogw_remote-access": { - source: "iana" - }, - "application/vnd.ntt-local.sip-ta_remote": { - source: "iana" - }, - "application/vnd.ntt-local.sip-ta_tcp_stream": { - source: "iana" - }, - "application/vnd.oasis.opendocument.chart": { - source: "iana", - extensions: ["odc"] - }, - "application/vnd.oasis.opendocument.chart-template": { - source: "iana", - extensions: ["otc"] - }, - "application/vnd.oasis.opendocument.database": { - source: "iana", - extensions: ["odb"] - }, - "application/vnd.oasis.opendocument.formula": { - source: "iana", - extensions: ["odf"] - }, - "application/vnd.oasis.opendocument.formula-template": { - source: "iana", - extensions: ["odft"] - }, - "application/vnd.oasis.opendocument.graphics": { - source: "iana", - compressible: false, - extensions: ["odg"] - }, - "application/vnd.oasis.opendocument.graphics-template": { - source: "iana", - extensions: ["otg"] - }, - "application/vnd.oasis.opendocument.image": { - source: "iana", - extensions: ["odi"] - }, - "application/vnd.oasis.opendocument.image-template": { - source: "iana", - extensions: ["oti"] - }, - "application/vnd.oasis.opendocument.presentation": { - source: "iana", - compressible: false, - extensions: ["odp"] - }, - "application/vnd.oasis.opendocument.presentation-template": { - source: "iana", - extensions: ["otp"] - }, - "application/vnd.oasis.opendocument.spreadsheet": { - source: "iana", - compressible: false, - extensions: ["ods"] - }, - "application/vnd.oasis.opendocument.spreadsheet-template": { - source: "iana", - extensions: ["ots"] - }, - "application/vnd.oasis.opendocument.text": { - source: "iana", - compressible: false, - extensions: ["odt"] - }, - "application/vnd.oasis.opendocument.text-master": { - source: "iana", - extensions: ["odm"] - }, - "application/vnd.oasis.opendocument.text-template": { - source: "iana", - extensions: ["ott"] - }, - "application/vnd.oasis.opendocument.text-web": { - source: "iana", - extensions: ["oth"] - }, - "application/vnd.obn": { - source: "iana" - }, - "application/vnd.ocf+cbor": { - source: "iana" - }, - "application/vnd.oci.image.manifest.v1+json": { - source: "iana", - compressible: true - }, - "application/vnd.oftn.l10n+json": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.contentaccessdownload+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.contentaccessstreaming+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.cspg-hexbinary": { - source: "iana" - }, - "application/vnd.oipf.dae.svg+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.dae.xhtml+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.mippvcontrolmessage+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.pae.gem": { - source: "iana" - }, - "application/vnd.oipf.spdiscovery+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.spdlist+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.ueprofile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oipf.userprofile+xml": { - source: "iana", - compressible: true - }, - "application/vnd.olpc-sugar": { - source: "iana", - extensions: ["xo"] - }, - "application/vnd.oma-scws-config": { - source: "iana" - }, - "application/vnd.oma-scws-http-request": { - source: "iana" - }, - "application/vnd.oma-scws-http-response": { - source: "iana" - }, - "application/vnd.oma.bcast.associated-procedure-parameter+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.drm-trigger+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.imd+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.ltkm": { - source: "iana" - }, - "application/vnd.oma.bcast.notification+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.provisioningtrigger": { - source: "iana" - }, - "application/vnd.oma.bcast.sgboot": { - source: "iana" - }, - "application/vnd.oma.bcast.sgdd+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.sgdu": { - source: "iana" - }, - "application/vnd.oma.bcast.simple-symbol-container": { - source: "iana" - }, - "application/vnd.oma.bcast.smartcard-trigger+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.sprov+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.bcast.stkm": { - source: "iana" - }, - "application/vnd.oma.cab-address-book+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.cab-feature-handler+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.cab-pcc+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.cab-subs-invite+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.cab-user-prefs+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.dcd": { - source: "iana" - }, - "application/vnd.oma.dcdc": { - source: "iana" - }, - "application/vnd.oma.dd2+xml": { - source: "iana", - compressible: true, - extensions: ["dd2"] - }, - "application/vnd.oma.drm.risd+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.group-usage-list+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.lwm2m+cbor": { - source: "iana" - }, - "application/vnd.oma.lwm2m+json": { - source: "iana", - compressible: true - }, - "application/vnd.oma.lwm2m+tlv": { - source: "iana" - }, - "application/vnd.oma.pal+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.poc.detailed-progress-report+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.poc.final-report+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.poc.groups+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.poc.invocation-descriptor+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.poc.optimized-progress-report+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.push": { - source: "iana" - }, - "application/vnd.oma.scidm.messages+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oma.xcap-directory+xml": { - source: "iana", - compressible: true - }, - "application/vnd.omads-email+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.omads-file+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.omads-folder+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.omaloc-supl-init": { - source: "iana" - }, - "application/vnd.onepager": { - source: "iana" - }, - "application/vnd.onepagertamp": { - source: "iana" - }, - "application/vnd.onepagertamx": { - source: "iana" - }, - "application/vnd.onepagertat": { - source: "iana" - }, - "application/vnd.onepagertatp": { - source: "iana" - }, - "application/vnd.onepagertatx": { - source: "iana" - }, - "application/vnd.openblox.game+xml": { - source: "iana", - compressible: true, - extensions: ["obgx"] - }, - "application/vnd.openblox.game-binary": { - source: "iana" - }, - "application/vnd.openeye.oeb": { - source: "iana" - }, - "application/vnd.openofficeorg.extension": { - source: "apache", - extensions: ["oxt"] - }, - "application/vnd.openstreetmap.data+xml": { - source: "iana", - compressible: true, - extensions: ["osm"] - }, - "application/vnd.opentimestamps.ots": { - source: "iana" - }, - "application/vnd.openxmlformats-officedocument.custom-properties+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawing+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.extended-properties+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation": { - source: "iana", - compressible: false, - extensions: ["pptx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide": { - source: "iana", - extensions: ["sldx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { - source: "iana", - extensions: ["ppsx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.template": { - source: "iana", - extensions: ["potx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { - source: "iana", - compressible: false, - extensions: ["xlsx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { - source: "iana", - extensions: ["xltx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.theme+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.themeoverride+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.vmldrawing": { - source: "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { - source: "iana", - compressible: false, - extensions: ["docx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { - source: "iana", - extensions: ["dotx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-package.core-properties+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { - source: "iana", - compressible: true - }, - "application/vnd.openxmlformats-package.relationships+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oracle.resource+json": { - source: "iana", - compressible: true - }, - "application/vnd.orange.indata": { - source: "iana" - }, - "application/vnd.osa.netdeploy": { - source: "iana" - }, - "application/vnd.osgeo.mapguide.package": { - source: "iana", - extensions: ["mgp"] - }, - "application/vnd.osgi.bundle": { - source: "iana" - }, - "application/vnd.osgi.dp": { - source: "iana", - extensions: ["dp"] - }, - "application/vnd.osgi.subsystem": { - source: "iana", - extensions: ["esa"] - }, - "application/vnd.otps.ct-kip+xml": { - source: "iana", - compressible: true - }, - "application/vnd.oxli.countgraph": { - source: "iana" - }, - "application/vnd.pagerduty+json": { - source: "iana", - compressible: true - }, - "application/vnd.palm": { - source: "iana", - extensions: ["pdb", "pqa", "oprc"] - }, - "application/vnd.panoply": { - source: "iana" - }, - "application/vnd.paos.xml": { - source: "iana" - }, - "application/vnd.patentdive": { - source: "iana" - }, - "application/vnd.patientecommsdoc": { - source: "iana" - }, - "application/vnd.pawaafile": { - source: "iana", - extensions: ["paw"] - }, - "application/vnd.pcos": { - source: "iana" - }, - "application/vnd.pg.format": { - source: "iana", - extensions: ["str"] - }, - "application/vnd.pg.osasli": { - source: "iana", - extensions: ["ei6"] - }, - "application/vnd.piaccess.application-licence": { - source: "iana" - }, - "application/vnd.picsel": { - source: "iana", - extensions: ["efif"] - }, - "application/vnd.pmi.widget": { - source: "iana", - extensions: ["wg"] - }, - "application/vnd.poc.group-advertisement+xml": { - source: "iana", - compressible: true - }, - "application/vnd.pocketlearn": { - source: "iana", - extensions: ["plf"] - }, - "application/vnd.powerbuilder6": { - source: "iana", - extensions: ["pbd"] - }, - "application/vnd.powerbuilder6-s": { - source: "iana" - }, - "application/vnd.powerbuilder7": { - source: "iana" - }, - "application/vnd.powerbuilder7-s": { - source: "iana" - }, - "application/vnd.powerbuilder75": { - source: "iana" - }, - "application/vnd.powerbuilder75-s": { - source: "iana" - }, - "application/vnd.preminet": { - source: "iana" - }, - "application/vnd.previewsystems.box": { - source: "iana", - extensions: ["box"] - }, - "application/vnd.proteus.magazine": { - source: "iana", - extensions: ["mgz"] - }, - "application/vnd.psfs": { - source: "iana" - }, - "application/vnd.publishare-delta-tree": { - source: "iana", - extensions: ["qps"] - }, - "application/vnd.pvi.ptid1": { - source: "iana", - extensions: ["ptid"] - }, - "application/vnd.pwg-multiplexed": { - source: "iana" - }, - "application/vnd.pwg-xhtml-print+xml": { - source: "iana", - compressible: true - }, - "application/vnd.qualcomm.brew-app-res": { - source: "iana" - }, - "application/vnd.quarantainenet": { - source: "iana" - }, - "application/vnd.quark.quarkxpress": { - source: "iana", - extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] - }, - "application/vnd.quobject-quoxdocument": { - source: "iana" - }, - "application/vnd.radisys.moml+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-audit+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-audit-conf+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-audit-conn+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-audit-dialog+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-audit-stream+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-conf+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-base+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-fax-detect+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-group+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-speech+xml": { - source: "iana", - compressible: true - }, - "application/vnd.radisys.msml-dialog-transform+xml": { - source: "iana", - compressible: true - }, - "application/vnd.rainstor.data": { - source: "iana" - }, - "application/vnd.rapid": { - source: "iana" - }, - "application/vnd.rar": { - source: "iana", - extensions: ["rar"] - }, - "application/vnd.realvnc.bed": { - source: "iana", - extensions: ["bed"] - }, - "application/vnd.recordare.musicxml": { - source: "iana", - extensions: ["mxl"] - }, - "application/vnd.recordare.musicxml+xml": { - source: "iana", - compressible: true, - extensions: ["musicxml"] - }, - "application/vnd.renlearn.rlprint": { - source: "iana" - }, - "application/vnd.resilient.logic": { - source: "iana" - }, - "application/vnd.restful+json": { - source: "iana", - compressible: true - }, - "application/vnd.rig.cryptonote": { - source: "iana", - extensions: ["cryptonote"] - }, - "application/vnd.rim.cod": { - source: "apache", - extensions: ["cod"] - }, - "application/vnd.rn-realmedia": { - source: "apache", - extensions: ["rm"] - }, - "application/vnd.rn-realmedia-vbr": { - source: "apache", - extensions: ["rmvb"] - }, - "application/vnd.route66.link66+xml": { - source: "iana", - compressible: true, - extensions: ["link66"] - }, - "application/vnd.rs-274x": { - source: "iana" - }, - "application/vnd.ruckus.download": { - source: "iana" - }, - "application/vnd.s3sms": { - source: "iana" - }, - "application/vnd.sailingtracker.track": { - source: "iana", - extensions: ["st"] - }, - "application/vnd.sar": { - source: "iana" - }, - "application/vnd.sbm.cid": { - source: "iana" - }, - "application/vnd.sbm.mid2": { - source: "iana" - }, - "application/vnd.scribus": { - source: "iana" - }, - "application/vnd.sealed.3df": { - source: "iana" - }, - "application/vnd.sealed.csf": { - source: "iana" - }, - "application/vnd.sealed.doc": { - source: "iana" - }, - "application/vnd.sealed.eml": { - source: "iana" - }, - "application/vnd.sealed.mht": { - source: "iana" - }, - "application/vnd.sealed.net": { - source: "iana" - }, - "application/vnd.sealed.ppt": { - source: "iana" - }, - "application/vnd.sealed.tiff": { - source: "iana" - }, - "application/vnd.sealed.xls": { - source: "iana" - }, - "application/vnd.sealedmedia.softseal.html": { - source: "iana" - }, - "application/vnd.sealedmedia.softseal.pdf": { - source: "iana" - }, - "application/vnd.seemail": { - source: "iana", - extensions: ["see"] - }, - "application/vnd.seis+json": { - source: "iana", - compressible: true - }, - "application/vnd.sema": { - source: "iana", - extensions: ["sema"] - }, - "application/vnd.semd": { - source: "iana", - extensions: ["semd"] - }, - "application/vnd.semf": { - source: "iana", - extensions: ["semf"] - }, - "application/vnd.shade-save-file": { - source: "iana" - }, - "application/vnd.shana.informed.formdata": { - source: "iana", - extensions: ["ifm"] - }, - "application/vnd.shana.informed.formtemplate": { - source: "iana", - extensions: ["itp"] - }, - "application/vnd.shana.informed.interchange": { - source: "iana", - extensions: ["iif"] - }, - "application/vnd.shana.informed.package": { - source: "iana", - extensions: ["ipk"] - }, - "application/vnd.shootproof+json": { - source: "iana", - compressible: true - }, - "application/vnd.shopkick+json": { - source: "iana", - compressible: true - }, - "application/vnd.shp": { - source: "iana" - }, - "application/vnd.shx": { - source: "iana" - }, - "application/vnd.sigrok.session": { - source: "iana" - }, - "application/vnd.simtech-mindmapper": { - source: "iana", - extensions: ["twd", "twds"] - }, - "application/vnd.siren+json": { - source: "iana", - compressible: true - }, - "application/vnd.smaf": { - source: "iana", - extensions: ["mmf"] - }, - "application/vnd.smart.notebook": { - source: "iana" - }, - "application/vnd.smart.teacher": { - source: "iana", - extensions: ["teacher"] - }, - "application/vnd.snesdev-page-table": { - source: "iana" - }, - "application/vnd.software602.filler.form+xml": { - source: "iana", - compressible: true, - extensions: ["fo"] - }, - "application/vnd.software602.filler.form-xml-zip": { - source: "iana" - }, - "application/vnd.solent.sdkm+xml": { - source: "iana", - compressible: true, - extensions: ["sdkm", "sdkd"] - }, - "application/vnd.spotfire.dxp": { - source: "iana", - extensions: ["dxp"] - }, - "application/vnd.spotfire.sfs": { - source: "iana", - extensions: ["sfs"] - }, - "application/vnd.sqlite3": { - source: "iana" - }, - "application/vnd.sss-cod": { - source: "iana" - }, - "application/vnd.sss-dtf": { - source: "iana" - }, - "application/vnd.sss-ntf": { - source: "iana" - }, - "application/vnd.stardivision.calc": { - source: "apache", - extensions: ["sdc"] - }, - "application/vnd.stardivision.draw": { - source: "apache", - extensions: ["sda"] - }, - "application/vnd.stardivision.impress": { - source: "apache", - extensions: ["sdd"] - }, - "application/vnd.stardivision.math": { - source: "apache", - extensions: ["smf"] - }, - "application/vnd.stardivision.writer": { - source: "apache", - extensions: ["sdw", "vor"] - }, - "application/vnd.stardivision.writer-global": { - source: "apache", - extensions: ["sgl"] - }, - "application/vnd.stepmania.package": { - source: "iana", - extensions: ["smzip"] - }, - "application/vnd.stepmania.stepchart": { - source: "iana", - extensions: ["sm"] - }, - "application/vnd.street-stream": { - source: "iana" - }, - "application/vnd.sun.wadl+xml": { - source: "iana", - compressible: true, - extensions: ["wadl"] - }, - "application/vnd.sun.xml.calc": { - source: "apache", - extensions: ["sxc"] - }, - "application/vnd.sun.xml.calc.template": { - source: "apache", - extensions: ["stc"] - }, - "application/vnd.sun.xml.draw": { - source: "apache", - extensions: ["sxd"] - }, - "application/vnd.sun.xml.draw.template": { - source: "apache", - extensions: ["std"] - }, - "application/vnd.sun.xml.impress": { - source: "apache", - extensions: ["sxi"] - }, - "application/vnd.sun.xml.impress.template": { - source: "apache", - extensions: ["sti"] - }, - "application/vnd.sun.xml.math": { - source: "apache", - extensions: ["sxm"] - }, - "application/vnd.sun.xml.writer": { - source: "apache", - extensions: ["sxw"] - }, - "application/vnd.sun.xml.writer.global": { - source: "apache", - extensions: ["sxg"] - }, - "application/vnd.sun.xml.writer.template": { - source: "apache", - extensions: ["stw"] - }, - "application/vnd.sus-calendar": { - source: "iana", - extensions: ["sus", "susp"] - }, - "application/vnd.svd": { - source: "iana", - extensions: ["svd"] - }, - "application/vnd.swiftview-ics": { - source: "iana" - }, - "application/vnd.sycle+xml": { - source: "iana", - compressible: true - }, - "application/vnd.syft+json": { - source: "iana", - compressible: true - }, - "application/vnd.symbian.install": { - source: "apache", - extensions: ["sis", "sisx"] - }, - "application/vnd.syncml+xml": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["xsm"] - }, - "application/vnd.syncml.dm+wbxml": { - source: "iana", - charset: "UTF-8", - extensions: ["bdm"] - }, - "application/vnd.syncml.dm+xml": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["xdm"] - }, - "application/vnd.syncml.dm.notification": { - source: "iana" - }, - "application/vnd.syncml.dmddf+wbxml": { - source: "iana" - }, - "application/vnd.syncml.dmddf+xml": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["ddf"] - }, - "application/vnd.syncml.dmtnds+wbxml": { - source: "iana" - }, - "application/vnd.syncml.dmtnds+xml": { - source: "iana", - charset: "UTF-8", - compressible: true - }, - "application/vnd.syncml.ds.notification": { - source: "iana" - }, - "application/vnd.tableschema+json": { - source: "iana", - compressible: true - }, - "application/vnd.tao.intent-module-archive": { - source: "iana", - extensions: ["tao"] - }, - "application/vnd.tcpdump.pcap": { - source: "iana", - extensions: ["pcap", "cap", "dmp"] - }, - "application/vnd.think-cell.ppttc+json": { - source: "iana", - compressible: true - }, - "application/vnd.tmd.mediaflex.api+xml": { - source: "iana", - compressible: true - }, - "application/vnd.tml": { - source: "iana" - }, - "application/vnd.tmobile-livetv": { - source: "iana", - extensions: ["tmo"] - }, - "application/vnd.tri.onesource": { - source: "iana" - }, - "application/vnd.trid.tpt": { - source: "iana", - extensions: ["tpt"] - }, - "application/vnd.triscape.mxs": { - source: "iana", - extensions: ["mxs"] - }, - "application/vnd.trueapp": { - source: "iana", - extensions: ["tra"] - }, - "application/vnd.truedoc": { - source: "iana" - }, - "application/vnd.ubisoft.webplayer": { - source: "iana" - }, - "application/vnd.ufdl": { - source: "iana", - extensions: ["ufd", "ufdl"] - }, - "application/vnd.uiq.theme": { - source: "iana", - extensions: ["utz"] - }, - "application/vnd.umajin": { - source: "iana", - extensions: ["umj"] - }, - "application/vnd.unity": { - source: "iana", - extensions: ["unityweb"] - }, - "application/vnd.uoml+xml": { - source: "iana", - compressible: true, - extensions: ["uoml"] - }, - "application/vnd.uplanet.alert": { - source: "iana" - }, - "application/vnd.uplanet.alert-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.bearer-choice": { - source: "iana" - }, - "application/vnd.uplanet.bearer-choice-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.cacheop": { - source: "iana" - }, - "application/vnd.uplanet.cacheop-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.channel": { - source: "iana" - }, - "application/vnd.uplanet.channel-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.list": { - source: "iana" - }, - "application/vnd.uplanet.list-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.listcmd": { - source: "iana" - }, - "application/vnd.uplanet.listcmd-wbxml": { - source: "iana" - }, - "application/vnd.uplanet.signal": { - source: "iana" - }, - "application/vnd.uri-map": { - source: "iana" - }, - "application/vnd.valve.source.material": { - source: "iana" - }, - "application/vnd.vcx": { - source: "iana", - extensions: ["vcx"] - }, - "application/vnd.vd-study": { - source: "iana" - }, - "application/vnd.vectorworks": { - source: "iana" - }, - "application/vnd.vel+json": { - source: "iana", - compressible: true - }, - "application/vnd.verimatrix.vcas": { - source: "iana" - }, - "application/vnd.veritone.aion+json": { - source: "iana", - compressible: true - }, - "application/vnd.veryant.thin": { - source: "iana" - }, - "application/vnd.ves.encrypted": { - source: "iana" - }, - "application/vnd.vidsoft.vidconference": { - source: "iana" - }, - "application/vnd.visio": { - source: "iana", - extensions: ["vsd", "vst", "vss", "vsw"] - }, - "application/vnd.visionary": { - source: "iana", - extensions: ["vis"] - }, - "application/vnd.vividence.scriptfile": { - source: "iana" - }, - "application/vnd.vsf": { - source: "iana", - extensions: ["vsf"] - }, - "application/vnd.wap.sic": { - source: "iana" - }, - "application/vnd.wap.slc": { - source: "iana" - }, - "application/vnd.wap.wbxml": { - source: "iana", - charset: "UTF-8", - extensions: ["wbxml"] - }, - "application/vnd.wap.wmlc": { - source: "iana", - extensions: ["wmlc"] - }, - "application/vnd.wap.wmlscriptc": { - source: "iana", - extensions: ["wmlsc"] - }, - "application/vnd.webturbo": { - source: "iana", - extensions: ["wtb"] - }, - "application/vnd.wfa.dpp": { - source: "iana" - }, - "application/vnd.wfa.p2p": { - source: "iana" - }, - "application/vnd.wfa.wsc": { - source: "iana" - }, - "application/vnd.windows.devicepairing": { - source: "iana" - }, - "application/vnd.wmc": { - source: "iana" - }, - "application/vnd.wmf.bootstrap": { - source: "iana" - }, - "application/vnd.wolfram.mathematica": { - source: "iana" - }, - "application/vnd.wolfram.mathematica.package": { - source: "iana" - }, - "application/vnd.wolfram.player": { - source: "iana", - extensions: ["nbp"] - }, - "application/vnd.wordperfect": { - source: "iana", - extensions: ["wpd"] - }, - "application/vnd.wqd": { - source: "iana", - extensions: ["wqd"] - }, - "application/vnd.wrq-hp3000-labelled": { - source: "iana" - }, - "application/vnd.wt.stf": { - source: "iana", - extensions: ["stf"] - }, - "application/vnd.wv.csp+wbxml": { - source: "iana" - }, - "application/vnd.wv.csp+xml": { - source: "iana", - compressible: true - }, - "application/vnd.wv.ssp+xml": { - source: "iana", - compressible: true - }, - "application/vnd.xacml+json": { - source: "iana", - compressible: true - }, - "application/vnd.xara": { - source: "iana", - extensions: ["xar"] - }, - "application/vnd.xfdl": { - source: "iana", - extensions: ["xfdl"] - }, - "application/vnd.xfdl.webform": { - source: "iana" - }, - "application/vnd.xmi+xml": { - source: "iana", - compressible: true - }, - "application/vnd.xmpie.cpkg": { - source: "iana" - }, - "application/vnd.xmpie.dpkg": { - source: "iana" - }, - "application/vnd.xmpie.plan": { - source: "iana" - }, - "application/vnd.xmpie.ppkg": { - source: "iana" - }, - "application/vnd.xmpie.xlim": { - source: "iana" - }, - "application/vnd.yamaha.hv-dic": { - source: "iana", - extensions: ["hvd"] - }, - "application/vnd.yamaha.hv-script": { - source: "iana", - extensions: ["hvs"] - }, - "application/vnd.yamaha.hv-voice": { - source: "iana", - extensions: ["hvp"] - }, - "application/vnd.yamaha.openscoreformat": { - source: "iana", - extensions: ["osf"] - }, - "application/vnd.yamaha.openscoreformat.osfpvg+xml": { - source: "iana", - compressible: true, - extensions: ["osfpvg"] - }, - "application/vnd.yamaha.remote-setup": { - source: "iana" - }, - "application/vnd.yamaha.smaf-audio": { - source: "iana", - extensions: ["saf"] - }, - "application/vnd.yamaha.smaf-phrase": { - source: "iana", - extensions: ["spf"] - }, - "application/vnd.yamaha.through-ngn": { - source: "iana" - }, - "application/vnd.yamaha.tunnel-udpencap": { - source: "iana" - }, - "application/vnd.yaoweme": { - source: "iana" - }, - "application/vnd.yellowriver-custom-menu": { - source: "iana", - extensions: ["cmp"] - }, - "application/vnd.youtube.yt": { - source: "iana" - }, - "application/vnd.zul": { - source: "iana", - extensions: ["zir", "zirz"] - }, - "application/vnd.zzazz.deck+xml": { - source: "iana", - compressible: true, - extensions: ["zaz"] - }, - "application/voicexml+xml": { - source: "iana", - compressible: true, - extensions: ["vxml"] - }, - "application/voucher-cms+json": { - source: "iana", - compressible: true - }, - "application/vq-rtcpxr": { - source: "iana" - }, - "application/wasm": { - source: "iana", - compressible: true, - extensions: ["wasm"] - }, - "application/watcherinfo+xml": { - source: "iana", - compressible: true, - extensions: ["wif"] - }, - "application/webpush-options+json": { - source: "iana", - compressible: true - }, - "application/whoispp-query": { - source: "iana" - }, - "application/whoispp-response": { - source: "iana" - }, - "application/widget": { - source: "iana", - extensions: ["wgt"] - }, - "application/winhlp": { - source: "apache", - extensions: ["hlp"] - }, - "application/wita": { - source: "iana" - }, - "application/wordperfect5.1": { - source: "iana" - }, - "application/wsdl+xml": { - source: "iana", - compressible: true, - extensions: ["wsdl"] - }, - "application/wspolicy+xml": { - source: "iana", - compressible: true, - extensions: ["wspolicy"] - }, - "application/x-7z-compressed": { - source: "apache", - compressible: false, - extensions: ["7z"] - }, - "application/x-abiword": { - source: "apache", - extensions: ["abw"] - }, - "application/x-ace-compressed": { - source: "apache", - extensions: ["ace"] - }, - "application/x-amf": { - source: "apache" - }, - "application/x-apple-diskimage": { - source: "apache", - extensions: ["dmg"] - }, - "application/x-arj": { - compressible: false, - extensions: ["arj"] - }, - "application/x-authorware-bin": { - source: "apache", - extensions: ["aab", "x32", "u32", "vox"] - }, - "application/x-authorware-map": { - source: "apache", - extensions: ["aam"] - }, - "application/x-authorware-seg": { - source: "apache", - extensions: ["aas"] - }, - "application/x-bcpio": { - source: "apache", - extensions: ["bcpio"] - }, - "application/x-bdoc": { - compressible: false, - extensions: ["bdoc"] - }, - "application/x-bittorrent": { - source: "apache", - extensions: ["torrent"] - }, - "application/x-blorb": { - source: "apache", - extensions: ["blb", "blorb"] - }, - "application/x-bzip": { - source: "apache", - compressible: false, - extensions: ["bz"] - }, - "application/x-bzip2": { - source: "apache", - compressible: false, - extensions: ["bz2", "boz"] - }, - "application/x-cbr": { - source: "apache", - extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] - }, - "application/x-cdlink": { - source: "apache", - extensions: ["vcd"] - }, - "application/x-cfs-compressed": { - source: "apache", - extensions: ["cfs"] - }, - "application/x-chat": { - source: "apache", - extensions: ["chat"] - }, - "application/x-chess-pgn": { - source: "apache", - extensions: ["pgn"] - }, - "application/x-chrome-extension": { - extensions: ["crx"] - }, - "application/x-cocoa": { - source: "nginx", - extensions: ["cco"] - }, - "application/x-compress": { - source: "apache" - }, - "application/x-conference": { - source: "apache", - extensions: ["nsc"] - }, - "application/x-cpio": { - source: "apache", - extensions: ["cpio"] - }, - "application/x-csh": { - source: "apache", - extensions: ["csh"] - }, - "application/x-deb": { - compressible: false - }, - "application/x-debian-package": { - source: "apache", - extensions: ["deb", "udeb"] - }, - "application/x-dgc-compressed": { - source: "apache", - extensions: ["dgc"] - }, - "application/x-director": { - source: "apache", - extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] - }, - "application/x-doom": { - source: "apache", - extensions: ["wad"] - }, - "application/x-dtbncx+xml": { - source: "apache", - compressible: true, - extensions: ["ncx"] - }, - "application/x-dtbook+xml": { - source: "apache", - compressible: true, - extensions: ["dtb"] - }, - "application/x-dtbresource+xml": { - source: "apache", - compressible: true, - extensions: ["res"] - }, - "application/x-dvi": { - source: "apache", - compressible: false, - extensions: ["dvi"] - }, - "application/x-envoy": { - source: "apache", - extensions: ["evy"] - }, - "application/x-eva": { - source: "apache", - extensions: ["eva"] - }, - "application/x-font-bdf": { - source: "apache", - extensions: ["bdf"] - }, - "application/x-font-dos": { - source: "apache" - }, - "application/x-font-framemaker": { - source: "apache" - }, - "application/x-font-ghostscript": { - source: "apache", - extensions: ["gsf"] - }, - "application/x-font-libgrx": { - source: "apache" - }, - "application/x-font-linux-psf": { - source: "apache", - extensions: ["psf"] - }, - "application/x-font-pcf": { - source: "apache", - extensions: ["pcf"] - }, - "application/x-font-snf": { - source: "apache", - extensions: ["snf"] - }, - "application/x-font-speedo": { - source: "apache" - }, - "application/x-font-sunos-news": { - source: "apache" - }, - "application/x-font-type1": { - source: "apache", - extensions: ["pfa", "pfb", "pfm", "afm"] - }, - "application/x-font-vfont": { - source: "apache" - }, - "application/x-freearc": { - source: "apache", - extensions: ["arc"] - }, - "application/x-futuresplash": { - source: "apache", - extensions: ["spl"] - }, - "application/x-gca-compressed": { - source: "apache", - extensions: ["gca"] - }, - "application/x-glulx": { - source: "apache", - extensions: ["ulx"] - }, - "application/x-gnumeric": { - source: "apache", - extensions: ["gnumeric"] - }, - "application/x-gramps-xml": { - source: "apache", - extensions: ["gramps"] - }, - "application/x-gtar": { - source: "apache", - extensions: ["gtar"] - }, - "application/x-gzip": { - source: "apache" - }, - "application/x-hdf": { - source: "apache", - extensions: ["hdf"] - }, - "application/x-httpd-php": { - compressible: true, - extensions: ["php"] - }, - "application/x-install-instructions": { - source: "apache", - extensions: ["install"] - }, - "application/x-iso9660-image": { - source: "apache", - extensions: ["iso"] - }, - "application/x-iwork-keynote-sffkey": { - extensions: ["key"] - }, - "application/x-iwork-numbers-sffnumbers": { - extensions: ["numbers"] - }, - "application/x-iwork-pages-sffpages": { - extensions: ["pages"] - }, - "application/x-java-archive-diff": { - source: "nginx", - extensions: ["jardiff"] - }, - "application/x-java-jnlp-file": { - source: "apache", - compressible: false, - extensions: ["jnlp"] - }, - "application/x-javascript": { - compressible: true - }, - "application/x-keepass2": { - extensions: ["kdbx"] - }, - "application/x-latex": { - source: "apache", - compressible: false, - extensions: ["latex"] - }, - "application/x-lua-bytecode": { - extensions: ["luac"] - }, - "application/x-lzh-compressed": { - source: "apache", - extensions: ["lzh", "lha"] - }, - "application/x-makeself": { - source: "nginx", - extensions: ["run"] - }, - "application/x-mie": { - source: "apache", - extensions: ["mie"] - }, - "application/x-mobipocket-ebook": { - source: "apache", - extensions: ["prc", "mobi"] - }, - "application/x-mpegurl": { - compressible: false - }, - "application/x-ms-application": { - source: "apache", - extensions: ["application"] - }, - "application/x-ms-shortcut": { - source: "apache", - extensions: ["lnk"] - }, - "application/x-ms-wmd": { - source: "apache", - extensions: ["wmd"] - }, - "application/x-ms-wmz": { - source: "apache", - extensions: ["wmz"] - }, - "application/x-ms-xbap": { - source: "apache", - extensions: ["xbap"] - }, - "application/x-msaccess": { - source: "apache", - extensions: ["mdb"] - }, - "application/x-msbinder": { - source: "apache", - extensions: ["obd"] - }, - "application/x-mscardfile": { - source: "apache", - extensions: ["crd"] - }, - "application/x-msclip": { - source: "apache", - extensions: ["clp"] - }, - "application/x-msdos-program": { - extensions: ["exe"] - }, - "application/x-msdownload": { - source: "apache", - extensions: ["exe", "dll", "com", "bat", "msi"] - }, - "application/x-msmediaview": { - source: "apache", - extensions: ["mvb", "m13", "m14"] - }, - "application/x-msmetafile": { - source: "apache", - extensions: ["wmf", "wmz", "emf", "emz"] - }, - "application/x-msmoney": { - source: "apache", - extensions: ["mny"] - }, - "application/x-mspublisher": { - source: "apache", - extensions: ["pub"] - }, - "application/x-msschedule": { - source: "apache", - extensions: ["scd"] - }, - "application/x-msterminal": { - source: "apache", - extensions: ["trm"] - }, - "application/x-mswrite": { - source: "apache", - extensions: ["wri"] - }, - "application/x-netcdf": { - source: "apache", - extensions: ["nc", "cdf"] - }, - "application/x-ns-proxy-autoconfig": { - compressible: true, - extensions: ["pac"] - }, - "application/x-nzb": { - source: "apache", - extensions: ["nzb"] - }, - "application/x-perl": { - source: "nginx", - extensions: ["pl", "pm"] - }, - "application/x-pilot": { - source: "nginx", - extensions: ["prc", "pdb"] - }, - "application/x-pkcs12": { - source: "apache", - compressible: false, - extensions: ["p12", "pfx"] - }, - "application/x-pkcs7-certificates": { - source: "apache", - extensions: ["p7b", "spc"] - }, - "application/x-pkcs7-certreqresp": { - source: "apache", - extensions: ["p7r"] - }, - "application/x-pki-message": { - source: "iana" - }, - "application/x-rar-compressed": { - source: "apache", - compressible: false, - extensions: ["rar"] - }, - "application/x-redhat-package-manager": { - source: "nginx", - extensions: ["rpm"] - }, - "application/x-research-info-systems": { - source: "apache", - extensions: ["ris"] - }, - "application/x-sea": { - source: "nginx", - extensions: ["sea"] - }, - "application/x-sh": { - source: "apache", - compressible: true, - extensions: ["sh"] - }, - "application/x-shar": { - source: "apache", - extensions: ["shar"] - }, - "application/x-shockwave-flash": { - source: "apache", - compressible: false, - extensions: ["swf"] - }, - "application/x-silverlight-app": { - source: "apache", - extensions: ["xap"] - }, - "application/x-sql": { - source: "apache", - extensions: ["sql"] - }, - "application/x-stuffit": { - source: "apache", - compressible: false, - extensions: ["sit"] - }, - "application/x-stuffitx": { - source: "apache", - extensions: ["sitx"] - }, - "application/x-subrip": { - source: "apache", - extensions: ["srt"] - }, - "application/x-sv4cpio": { - source: "apache", - extensions: ["sv4cpio"] - }, - "application/x-sv4crc": { - source: "apache", - extensions: ["sv4crc"] - }, - "application/x-t3vm-image": { - source: "apache", - extensions: ["t3"] - }, - "application/x-tads": { - source: "apache", - extensions: ["gam"] - }, - "application/x-tar": { - source: "apache", - compressible: true, - extensions: ["tar"] - }, - "application/x-tcl": { - source: "apache", - extensions: ["tcl", "tk"] - }, - "application/x-tex": { - source: "apache", - extensions: ["tex"] - }, - "application/x-tex-tfm": { - source: "apache", - extensions: ["tfm"] - }, - "application/x-texinfo": { - source: "apache", - extensions: ["texinfo", "texi"] - }, - "application/x-tgif": { - source: "apache", - extensions: ["obj"] - }, - "application/x-ustar": { - source: "apache", - extensions: ["ustar"] - }, - "application/x-virtualbox-hdd": { - compressible: true, - extensions: ["hdd"] - }, - "application/x-virtualbox-ova": { - compressible: true, - extensions: ["ova"] - }, - "application/x-virtualbox-ovf": { - compressible: true, - extensions: ["ovf"] - }, - "application/x-virtualbox-vbox": { - compressible: true, - extensions: ["vbox"] - }, - "application/x-virtualbox-vbox-extpack": { - compressible: false, - extensions: ["vbox-extpack"] - }, - "application/x-virtualbox-vdi": { - compressible: true, - extensions: ["vdi"] - }, - "application/x-virtualbox-vhd": { - compressible: true, - extensions: ["vhd"] - }, - "application/x-virtualbox-vmdk": { - compressible: true, - extensions: ["vmdk"] - }, - "application/x-wais-source": { - source: "apache", - extensions: ["src"] - }, - "application/x-web-app-manifest+json": { - compressible: true, - extensions: ["webapp"] - }, - "application/x-www-form-urlencoded": { - source: "iana", - compressible: true - }, - "application/x-x509-ca-cert": { - source: "iana", - extensions: ["der", "crt", "pem"] - }, - "application/x-x509-ca-ra-cert": { - source: "iana" - }, - "application/x-x509-next-ca-cert": { - source: "iana" - }, - "application/x-xfig": { - source: "apache", - extensions: ["fig"] - }, - "application/x-xliff+xml": { - source: "apache", - compressible: true, - extensions: ["xlf"] - }, - "application/x-xpinstall": { - source: "apache", - compressible: false, - extensions: ["xpi"] - }, - "application/x-xz": { - source: "apache", - extensions: ["xz"] - }, - "application/x-zmachine": { - source: "apache", - extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] - }, - "application/x400-bp": { - source: "iana" - }, - "application/xacml+xml": { - source: "iana", - compressible: true - }, - "application/xaml+xml": { - source: "apache", - compressible: true, - extensions: ["xaml"] - }, - "application/xcap-att+xml": { - source: "iana", - compressible: true, - extensions: ["xav"] - }, - "application/xcap-caps+xml": { - source: "iana", - compressible: true, - extensions: ["xca"] - }, - "application/xcap-diff+xml": { - source: "iana", - compressible: true, - extensions: ["xdf"] - }, - "application/xcap-el+xml": { - source: "iana", - compressible: true, - extensions: ["xel"] - }, - "application/xcap-error+xml": { - source: "iana", - compressible: true - }, - "application/xcap-ns+xml": { - source: "iana", - compressible: true, - extensions: ["xns"] - }, - "application/xcon-conference-info+xml": { - source: "iana", - compressible: true - }, - "application/xcon-conference-info-diff+xml": { - source: "iana", - compressible: true - }, - "application/xenc+xml": { - source: "iana", - compressible: true, - extensions: ["xenc"] - }, - "application/xhtml+xml": { - source: "iana", - compressible: true, - extensions: ["xhtml", "xht"] - }, - "application/xhtml-voice+xml": { - source: "apache", - compressible: true - }, - "application/xliff+xml": { - source: "iana", - compressible: true, - extensions: ["xlf"] - }, - "application/xml": { - source: "iana", - compressible: true, - extensions: ["xml", "xsl", "xsd", "rng"] - }, - "application/xml-dtd": { - source: "iana", - compressible: true, - extensions: ["dtd"] - }, - "application/xml-external-parsed-entity": { - source: "iana" - }, - "application/xml-patch+xml": { - source: "iana", - compressible: true - }, - "application/xmpp+xml": { - source: "iana", - compressible: true - }, - "application/xop+xml": { - source: "iana", - compressible: true, - extensions: ["xop"] - }, - "application/xproc+xml": { - source: "apache", - compressible: true, - extensions: ["xpl"] - }, - "application/xslt+xml": { - source: "iana", - compressible: true, - extensions: ["xsl", "xslt"] - }, - "application/xspf+xml": { - source: "apache", - compressible: true, - extensions: ["xspf"] - }, - "application/xv+xml": { - source: "iana", - compressible: true, - extensions: ["mxml", "xhvml", "xvml", "xvm"] - }, - "application/yang": { - source: "iana", - extensions: ["yang"] - }, - "application/yang-data+json": { - source: "iana", - compressible: true - }, - "application/yang-data+xml": { - source: "iana", - compressible: true - }, - "application/yang-patch+json": { - source: "iana", - compressible: true - }, - "application/yang-patch+xml": { - source: "iana", - compressible: true - }, - "application/yin+xml": { - source: "iana", - compressible: true, - extensions: ["yin"] - }, - "application/zip": { - source: "iana", - compressible: false, - extensions: ["zip"] - }, - "application/zlib": { - source: "iana" - }, - "application/zstd": { - source: "iana" - }, - "audio/1d-interleaved-parityfec": { - source: "iana" - }, - "audio/32kadpcm": { - source: "iana" - }, - "audio/3gpp": { - source: "iana", - compressible: false, - extensions: ["3gpp"] - }, - "audio/3gpp2": { - source: "iana" - }, - "audio/aac": { - source: "iana" - }, - "audio/ac3": { - source: "iana" - }, - "audio/adpcm": { - source: "apache", - extensions: ["adp"] - }, - "audio/amr": { - source: "iana", - extensions: ["amr"] - }, - "audio/amr-wb": { - source: "iana" - }, - "audio/amr-wb+": { - source: "iana" - }, - "audio/aptx": { - source: "iana" - }, - "audio/asc": { - source: "iana" - }, - "audio/atrac-advanced-lossless": { - source: "iana" - }, - "audio/atrac-x": { - source: "iana" - }, - "audio/atrac3": { - source: "iana" - }, - "audio/basic": { - source: "iana", - compressible: false, - extensions: ["au", "snd"] - }, - "audio/bv16": { - source: "iana" - }, - "audio/bv32": { - source: "iana" - }, - "audio/clearmode": { - source: "iana" - }, - "audio/cn": { - source: "iana" - }, - "audio/dat12": { - source: "iana" - }, - "audio/dls": { - source: "iana" - }, - "audio/dsr-es201108": { - source: "iana" - }, - "audio/dsr-es202050": { - source: "iana" - }, - "audio/dsr-es202211": { - source: "iana" - }, - "audio/dsr-es202212": { - source: "iana" - }, - "audio/dv": { - source: "iana" - }, - "audio/dvi4": { - source: "iana" - }, - "audio/eac3": { - source: "iana" - }, - "audio/encaprtp": { - source: "iana" - }, - "audio/evrc": { - source: "iana" - }, - "audio/evrc-qcp": { - source: "iana" - }, - "audio/evrc0": { - source: "iana" - }, - "audio/evrc1": { - source: "iana" - }, - "audio/evrcb": { - source: "iana" - }, - "audio/evrcb0": { - source: "iana" - }, - "audio/evrcb1": { - source: "iana" - }, - "audio/evrcnw": { - source: "iana" - }, - "audio/evrcnw0": { - source: "iana" - }, - "audio/evrcnw1": { - source: "iana" - }, - "audio/evrcwb": { - source: "iana" - }, - "audio/evrcwb0": { - source: "iana" - }, - "audio/evrcwb1": { - source: "iana" - }, - "audio/evs": { - source: "iana" - }, - "audio/flexfec": { - source: "iana" - }, - "audio/fwdred": { - source: "iana" - }, - "audio/g711-0": { - source: "iana" - }, - "audio/g719": { - source: "iana" - }, - "audio/g722": { - source: "iana" - }, - "audio/g7221": { - source: "iana" - }, - "audio/g723": { - source: "iana" - }, - "audio/g726-16": { - source: "iana" - }, - "audio/g726-24": { - source: "iana" - }, - "audio/g726-32": { - source: "iana" - }, - "audio/g726-40": { - source: "iana" - }, - "audio/g728": { - source: "iana" - }, - "audio/g729": { - source: "iana" - }, - "audio/g7291": { - source: "iana" - }, - "audio/g729d": { - source: "iana" - }, - "audio/g729e": { - source: "iana" - }, - "audio/gsm": { - source: "iana" - }, - "audio/gsm-efr": { - source: "iana" - }, - "audio/gsm-hr-08": { - source: "iana" - }, - "audio/ilbc": { - source: "iana" - }, - "audio/ip-mr_v2.5": { - source: "iana" - }, - "audio/isac": { - source: "apache" - }, - "audio/l16": { - source: "iana" - }, - "audio/l20": { - source: "iana" - }, - "audio/l24": { - source: "iana", - compressible: false - }, - "audio/l8": { - source: "iana" - }, - "audio/lpc": { - source: "iana" - }, - "audio/melp": { - source: "iana" - }, - "audio/melp1200": { - source: "iana" - }, - "audio/melp2400": { - source: "iana" - }, - "audio/melp600": { - source: "iana" - }, - "audio/mhas": { - source: "iana" - }, - "audio/midi": { - source: "apache", - extensions: ["mid", "midi", "kar", "rmi"] - }, - "audio/mobile-xmf": { - source: "iana", - extensions: ["mxmf"] - }, - "audio/mp3": { - compressible: false, - extensions: ["mp3"] - }, - "audio/mp4": { - source: "iana", - compressible: false, - extensions: ["m4a", "mp4a"] - }, - "audio/mp4a-latm": { - source: "iana" - }, - "audio/mpa": { - source: "iana" - }, - "audio/mpa-robust": { - source: "iana" - }, - "audio/mpeg": { - source: "iana", - compressible: false, - extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] - }, - "audio/mpeg4-generic": { - source: "iana" - }, - "audio/musepack": { - source: "apache" - }, - "audio/ogg": { - source: "iana", - compressible: false, - extensions: ["oga", "ogg", "spx", "opus"] - }, - "audio/opus": { - source: "iana" - }, - "audio/parityfec": { - source: "iana" - }, - "audio/pcma": { - source: "iana" - }, - "audio/pcma-wb": { - source: "iana" - }, - "audio/pcmu": { - source: "iana" - }, - "audio/pcmu-wb": { - source: "iana" - }, - "audio/prs.sid": { - source: "iana" - }, - "audio/qcelp": { - source: "iana" - }, - "audio/raptorfec": { - source: "iana" - }, - "audio/red": { - source: "iana" - }, - "audio/rtp-enc-aescm128": { - source: "iana" - }, - "audio/rtp-midi": { - source: "iana" - }, - "audio/rtploopback": { - source: "iana" - }, - "audio/rtx": { - source: "iana" - }, - "audio/s3m": { - source: "apache", - extensions: ["s3m"] - }, - "audio/scip": { - source: "iana" - }, - "audio/silk": { - source: "apache", - extensions: ["sil"] - }, - "audio/smv": { - source: "iana" - }, - "audio/smv-qcp": { - source: "iana" - }, - "audio/smv0": { - source: "iana" - }, - "audio/sofa": { - source: "iana" - }, - "audio/sp-midi": { - source: "iana" - }, - "audio/speex": { - source: "iana" - }, - "audio/t140c": { - source: "iana" - }, - "audio/t38": { - source: "iana" - }, - "audio/telephone-event": { - source: "iana" - }, - "audio/tetra_acelp": { - source: "iana" - }, - "audio/tetra_acelp_bb": { - source: "iana" - }, - "audio/tone": { - source: "iana" - }, - "audio/tsvcis": { - source: "iana" - }, - "audio/uemclip": { - source: "iana" - }, - "audio/ulpfec": { - source: "iana" - }, - "audio/usac": { - source: "iana" - }, - "audio/vdvi": { - source: "iana" - }, - "audio/vmr-wb": { - source: "iana" - }, - "audio/vnd.3gpp.iufp": { - source: "iana" - }, - "audio/vnd.4sb": { - source: "iana" - }, - "audio/vnd.audiokoz": { - source: "iana" - }, - "audio/vnd.celp": { - source: "iana" - }, - "audio/vnd.cisco.nse": { - source: "iana" - }, - "audio/vnd.cmles.radio-events": { - source: "iana" - }, - "audio/vnd.cns.anp1": { - source: "iana" - }, - "audio/vnd.cns.inf1": { - source: "iana" - }, - "audio/vnd.dece.audio": { - source: "iana", - extensions: ["uva", "uvva"] - }, - "audio/vnd.digital-winds": { - source: "iana", - extensions: ["eol"] - }, - "audio/vnd.dlna.adts": { - source: "iana" - }, - "audio/vnd.dolby.heaac.1": { - source: "iana" - }, - "audio/vnd.dolby.heaac.2": { - source: "iana" - }, - "audio/vnd.dolby.mlp": { - source: "iana" - }, - "audio/vnd.dolby.mps": { - source: "iana" - }, - "audio/vnd.dolby.pl2": { - source: "iana" - }, - "audio/vnd.dolby.pl2x": { - source: "iana" - }, - "audio/vnd.dolby.pl2z": { - source: "iana" - }, - "audio/vnd.dolby.pulse.1": { - source: "iana" - }, - "audio/vnd.dra": { - source: "iana", - extensions: ["dra"] - }, - "audio/vnd.dts": { - source: "iana", - extensions: ["dts"] - }, - "audio/vnd.dts.hd": { - source: "iana", - extensions: ["dtshd"] - }, - "audio/vnd.dts.uhd": { - source: "iana" - }, - "audio/vnd.dvb.file": { - source: "iana" - }, - "audio/vnd.everad.plj": { - source: "iana" - }, - "audio/vnd.hns.audio": { - source: "iana" - }, - "audio/vnd.lucent.voice": { - source: "iana", - extensions: ["lvp"] - }, - "audio/vnd.ms-playready.media.pya": { - source: "iana", - extensions: ["pya"] - }, - "audio/vnd.nokia.mobile-xmf": { - source: "iana" - }, - "audio/vnd.nortel.vbk": { - source: "iana" - }, - "audio/vnd.nuera.ecelp4800": { - source: "iana", - extensions: ["ecelp4800"] - }, - "audio/vnd.nuera.ecelp7470": { - source: "iana", - extensions: ["ecelp7470"] - }, - "audio/vnd.nuera.ecelp9600": { - source: "iana", - extensions: ["ecelp9600"] - }, - "audio/vnd.octel.sbc": { - source: "iana" - }, - "audio/vnd.presonus.multitrack": { - source: "iana" - }, - "audio/vnd.qcelp": { - source: "iana" - }, - "audio/vnd.rhetorex.32kadpcm": { - source: "iana" - }, - "audio/vnd.rip": { - source: "iana", - extensions: ["rip"] - }, - "audio/vnd.rn-realaudio": { - compressible: false - }, - "audio/vnd.sealedmedia.softseal.mpeg": { - source: "iana" - }, - "audio/vnd.vmx.cvsd": { - source: "iana" - }, - "audio/vnd.wave": { - compressible: false - }, - "audio/vorbis": { - source: "iana", - compressible: false - }, - "audio/vorbis-config": { - source: "iana" - }, - "audio/wav": { - compressible: false, - extensions: ["wav"] - }, - "audio/wave": { - compressible: false, - extensions: ["wav"] - }, - "audio/webm": { - source: "apache", - compressible: false, - extensions: ["weba"] - }, - "audio/x-aac": { - source: "apache", - compressible: false, - extensions: ["aac"] - }, - "audio/x-aiff": { - source: "apache", - extensions: ["aif", "aiff", "aifc"] - }, - "audio/x-caf": { - source: "apache", - compressible: false, - extensions: ["caf"] - }, - "audio/x-flac": { - source: "apache", - extensions: ["flac"] - }, - "audio/x-m4a": { - source: "nginx", - extensions: ["m4a"] - }, - "audio/x-matroska": { - source: "apache", - extensions: ["mka"] - }, - "audio/x-mpegurl": { - source: "apache", - extensions: ["m3u"] - }, - "audio/x-ms-wax": { - source: "apache", - extensions: ["wax"] - }, - "audio/x-ms-wma": { - source: "apache", - extensions: ["wma"] - }, - "audio/x-pn-realaudio": { - source: "apache", - extensions: ["ram", "ra"] - }, - "audio/x-pn-realaudio-plugin": { - source: "apache", - extensions: ["rmp"] - }, - "audio/x-realaudio": { - source: "nginx", - extensions: ["ra"] - }, - "audio/x-tta": { - source: "apache" - }, - "audio/x-wav": { - source: "apache", - extensions: ["wav"] - }, - "audio/xm": { - source: "apache", - extensions: ["xm"] - }, - "chemical/x-cdx": { - source: "apache", - extensions: ["cdx"] - }, - "chemical/x-cif": { - source: "apache", - extensions: ["cif"] - }, - "chemical/x-cmdf": { - source: "apache", - extensions: ["cmdf"] - }, - "chemical/x-cml": { - source: "apache", - extensions: ["cml"] - }, - "chemical/x-csml": { - source: "apache", - extensions: ["csml"] - }, - "chemical/x-pdb": { - source: "apache" - }, - "chemical/x-xyz": { - source: "apache", - extensions: ["xyz"] - }, - "font/collection": { - source: "iana", - extensions: ["ttc"] - }, - "font/otf": { - source: "iana", - compressible: true, - extensions: ["otf"] - }, - "font/sfnt": { - source: "iana" - }, - "font/ttf": { - source: "iana", - compressible: true, - extensions: ["ttf"] - }, - "font/woff": { - source: "iana", - extensions: ["woff"] - }, - "font/woff2": { - source: "iana", - extensions: ["woff2"] - }, - "image/aces": { - source: "iana", - extensions: ["exr"] - }, - "image/apng": { - compressible: false, - extensions: ["apng"] - }, - "image/avci": { - source: "iana", - extensions: ["avci"] - }, - "image/avcs": { - source: "iana", - extensions: ["avcs"] - }, - "image/avif": { - source: "iana", - compressible: false, - extensions: ["avif"] - }, - "image/bmp": { - source: "iana", - compressible: true, - extensions: ["bmp"] - }, - "image/cgm": { - source: "iana", - extensions: ["cgm"] - }, - "image/dicom-rle": { - source: "iana", - extensions: ["drle"] - }, - "image/emf": { - source: "iana", - extensions: ["emf"] - }, - "image/fits": { - source: "iana", - extensions: ["fits"] - }, - "image/g3fax": { - source: "iana", - extensions: ["g3"] - }, - "image/gif": { - source: "iana", - compressible: false, - extensions: ["gif"] - }, - "image/heic": { - source: "iana", - extensions: ["heic"] - }, - "image/heic-sequence": { - source: "iana", - extensions: ["heics"] - }, - "image/heif": { - source: "iana", - extensions: ["heif"] - }, - "image/heif-sequence": { - source: "iana", - extensions: ["heifs"] - }, - "image/hej2k": { - source: "iana", - extensions: ["hej2"] - }, - "image/hsj2": { - source: "iana", - extensions: ["hsj2"] - }, - "image/ief": { - source: "iana", - extensions: ["ief"] - }, - "image/jls": { - source: "iana", - extensions: ["jls"] - }, - "image/jp2": { - source: "iana", - compressible: false, - extensions: ["jp2", "jpg2"] - }, - "image/jpeg": { - source: "iana", - compressible: false, - extensions: ["jpeg", "jpg", "jpe"] - }, - "image/jph": { - source: "iana", - extensions: ["jph"] - }, - "image/jphc": { - source: "iana", - extensions: ["jhc"] - }, - "image/jpm": { - source: "iana", - compressible: false, - extensions: ["jpm"] - }, - "image/jpx": { - source: "iana", - compressible: false, - extensions: ["jpx", "jpf"] - }, - "image/jxr": { - source: "iana", - extensions: ["jxr"] - }, - "image/jxra": { - source: "iana", - extensions: ["jxra"] - }, - "image/jxrs": { - source: "iana", - extensions: ["jxrs"] - }, - "image/jxs": { - source: "iana", - extensions: ["jxs"] - }, - "image/jxsc": { - source: "iana", - extensions: ["jxsc"] - }, - "image/jxsi": { - source: "iana", - extensions: ["jxsi"] - }, - "image/jxss": { - source: "iana", - extensions: ["jxss"] - }, - "image/ktx": { - source: "iana", - extensions: ["ktx"] - }, - "image/ktx2": { - source: "iana", - extensions: ["ktx2"] - }, - "image/naplps": { - source: "iana" - }, - "image/pjpeg": { - compressible: false - }, - "image/png": { - source: "iana", - compressible: false, - extensions: ["png"] - }, - "image/prs.btif": { - source: "iana", - extensions: ["btif"] - }, - "image/prs.pti": { - source: "iana", - extensions: ["pti"] - }, - "image/pwg-raster": { - source: "iana" - }, - "image/sgi": { - source: "apache", - extensions: ["sgi"] - }, - "image/svg+xml": { - source: "iana", - compressible: true, - extensions: ["svg", "svgz"] - }, - "image/t38": { - source: "iana", - extensions: ["t38"] - }, - "image/tiff": { - source: "iana", - compressible: false, - extensions: ["tif", "tiff"] - }, - "image/tiff-fx": { - source: "iana", - extensions: ["tfx"] - }, - "image/vnd.adobe.photoshop": { - source: "iana", - compressible: true, - extensions: ["psd"] - }, - "image/vnd.airzip.accelerator.azv": { - source: "iana", - extensions: ["azv"] - }, - "image/vnd.cns.inf2": { - source: "iana" - }, - "image/vnd.dece.graphic": { - source: "iana", - extensions: ["uvi", "uvvi", "uvg", "uvvg"] - }, - "image/vnd.djvu": { - source: "iana", - extensions: ["djvu", "djv"] - }, - "image/vnd.dvb.subtitle": { - source: "iana", - extensions: ["sub"] - }, - "image/vnd.dwg": { - source: "iana", - extensions: ["dwg"] - }, - "image/vnd.dxf": { - source: "iana", - extensions: ["dxf"] - }, - "image/vnd.fastbidsheet": { - source: "iana", - extensions: ["fbs"] - }, - "image/vnd.fpx": { - source: "iana", - extensions: ["fpx"] - }, - "image/vnd.fst": { - source: "iana", - extensions: ["fst"] - }, - "image/vnd.fujixerox.edmics-mmr": { - source: "iana", - extensions: ["mmr"] - }, - "image/vnd.fujixerox.edmics-rlc": { - source: "iana", - extensions: ["rlc"] - }, - "image/vnd.globalgraphics.pgb": { - source: "iana" - }, - "image/vnd.microsoft.icon": { - source: "iana", - compressible: true, - extensions: ["ico"] - }, - "image/vnd.mix": { - source: "iana" - }, - "image/vnd.mozilla.apng": { - source: "iana" - }, - "image/vnd.ms-dds": { - compressible: true, - extensions: ["dds"] - }, - "image/vnd.ms-modi": { - source: "iana", - extensions: ["mdi"] - }, - "image/vnd.ms-photo": { - source: "apache", - extensions: ["wdp"] - }, - "image/vnd.net-fpx": { - source: "iana", - extensions: ["npx"] - }, - "image/vnd.pco.b16": { - source: "iana", - extensions: ["b16"] - }, - "image/vnd.radiance": { - source: "iana" - }, - "image/vnd.sealed.png": { - source: "iana" - }, - "image/vnd.sealedmedia.softseal.gif": { - source: "iana" - }, - "image/vnd.sealedmedia.softseal.jpg": { - source: "iana" - }, - "image/vnd.svf": { - source: "iana" - }, - "image/vnd.tencent.tap": { - source: "iana", - extensions: ["tap"] - }, - "image/vnd.valve.source.texture": { - source: "iana", - extensions: ["vtf"] - }, - "image/vnd.wap.wbmp": { - source: "iana", - extensions: ["wbmp"] - }, - "image/vnd.xiff": { - source: "iana", - extensions: ["xif"] - }, - "image/vnd.zbrush.pcx": { - source: "iana", - extensions: ["pcx"] - }, - "image/webp": { - source: "apache", - extensions: ["webp"] - }, - "image/wmf": { - source: "iana", - extensions: ["wmf"] - }, - "image/x-3ds": { - source: "apache", - extensions: ["3ds"] - }, - "image/x-cmu-raster": { - source: "apache", - extensions: ["ras"] - }, - "image/x-cmx": { - source: "apache", - extensions: ["cmx"] - }, - "image/x-freehand": { - source: "apache", - extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] - }, - "image/x-icon": { - source: "apache", - compressible: true, - extensions: ["ico"] - }, - "image/x-jng": { - source: "nginx", - extensions: ["jng"] - }, - "image/x-mrsid-image": { - source: "apache", - extensions: ["sid"] - }, - "image/x-ms-bmp": { - source: "nginx", - compressible: true, - extensions: ["bmp"] - }, - "image/x-pcx": { - source: "apache", - extensions: ["pcx"] - }, - "image/x-pict": { - source: "apache", - extensions: ["pic", "pct"] - }, - "image/x-portable-anymap": { - source: "apache", - extensions: ["pnm"] - }, - "image/x-portable-bitmap": { - source: "apache", - extensions: ["pbm"] - }, - "image/x-portable-graymap": { - source: "apache", - extensions: ["pgm"] - }, - "image/x-portable-pixmap": { - source: "apache", - extensions: ["ppm"] - }, - "image/x-rgb": { - source: "apache", - extensions: ["rgb"] - }, - "image/x-tga": { - source: "apache", - extensions: ["tga"] - }, - "image/x-xbitmap": { - source: "apache", - extensions: ["xbm"] - }, - "image/x-xcf": { - compressible: false - }, - "image/x-xpixmap": { - source: "apache", - extensions: ["xpm"] - }, - "image/x-xwindowdump": { - source: "apache", - extensions: ["xwd"] - }, - "message/cpim": { - source: "iana" - }, - "message/delivery-status": { - source: "iana" - }, - "message/disposition-notification": { - source: "iana", - extensions: [ - "disposition-notification" - ] - }, - "message/external-body": { - source: "iana" - }, - "message/feedback-report": { - source: "iana" - }, - "message/global": { - source: "iana", - extensions: ["u8msg"] - }, - "message/global-delivery-status": { - source: "iana", - extensions: ["u8dsn"] - }, - "message/global-disposition-notification": { - source: "iana", - extensions: ["u8mdn"] - }, - "message/global-headers": { - source: "iana", - extensions: ["u8hdr"] - }, - "message/http": { - source: "iana", - compressible: false - }, - "message/imdn+xml": { - source: "iana", - compressible: true - }, - "message/news": { - source: "iana" - }, - "message/partial": { - source: "iana", - compressible: false - }, - "message/rfc822": { - source: "iana", - compressible: true, - extensions: ["eml", "mime"] - }, - "message/s-http": { - source: "iana" - }, - "message/sip": { - source: "iana" - }, - "message/sipfrag": { - source: "iana" - }, - "message/tracking-status": { - source: "iana" - }, - "message/vnd.si.simp": { - source: "iana" - }, - "message/vnd.wfa.wsc": { - source: "iana", - extensions: ["wsc"] - }, - "model/3mf": { - source: "iana", - extensions: ["3mf"] - }, - "model/e57": { - source: "iana" - }, - "model/gltf+json": { - source: "iana", - compressible: true, - extensions: ["gltf"] - }, - "model/gltf-binary": { - source: "iana", - compressible: true, - extensions: ["glb"] - }, - "model/iges": { - source: "iana", - compressible: false, - extensions: ["igs", "iges"] - }, - "model/mesh": { - source: "iana", - compressible: false, - extensions: ["msh", "mesh", "silo"] - }, - "model/mtl": { - source: "iana", - extensions: ["mtl"] - }, - "model/obj": { - source: "iana", - extensions: ["obj"] - }, - "model/step": { - source: "iana" - }, - "model/step+xml": { - source: "iana", - compressible: true, - extensions: ["stpx"] - }, - "model/step+zip": { - source: "iana", - compressible: false, - extensions: ["stpz"] - }, - "model/step-xml+zip": { - source: "iana", - compressible: false, - extensions: ["stpxz"] - }, - "model/stl": { - source: "iana", - extensions: ["stl"] - }, - "model/vnd.collada+xml": { - source: "iana", - compressible: true, - extensions: ["dae"] - }, - "model/vnd.dwf": { - source: "iana", - extensions: ["dwf"] - }, - "model/vnd.flatland.3dml": { - source: "iana" - }, - "model/vnd.gdl": { - source: "iana", - extensions: ["gdl"] - }, - "model/vnd.gs-gdl": { - source: "apache" - }, - "model/vnd.gs.gdl": { - source: "iana" - }, - "model/vnd.gtw": { - source: "iana", - extensions: ["gtw"] - }, - "model/vnd.moml+xml": { - source: "iana", - compressible: true - }, - "model/vnd.mts": { - source: "iana", - extensions: ["mts"] - }, - "model/vnd.opengex": { - source: "iana", - extensions: ["ogex"] - }, - "model/vnd.parasolid.transmit.binary": { - source: "iana", - extensions: ["x_b"] - }, - "model/vnd.parasolid.transmit.text": { - source: "iana", - extensions: ["x_t"] - }, - "model/vnd.pytha.pyox": { - source: "iana" - }, - "model/vnd.rosette.annotated-data-model": { - source: "iana" - }, - "model/vnd.sap.vds": { - source: "iana", - extensions: ["vds"] - }, - "model/vnd.usdz+zip": { - source: "iana", - compressible: false, - extensions: ["usdz"] - }, - "model/vnd.valve.source.compiled-map": { - source: "iana", - extensions: ["bsp"] - }, - "model/vnd.vtu": { - source: "iana", - extensions: ["vtu"] - }, - "model/vrml": { - source: "iana", - compressible: false, - extensions: ["wrl", "vrml"] - }, - "model/x3d+binary": { - source: "apache", - compressible: false, - extensions: ["x3db", "x3dbz"] - }, - "model/x3d+fastinfoset": { - source: "iana", - extensions: ["x3db"] - }, - "model/x3d+vrml": { - source: "apache", - compressible: false, - extensions: ["x3dv", "x3dvz"] - }, - "model/x3d+xml": { - source: "iana", - compressible: true, - extensions: ["x3d", "x3dz"] - }, - "model/x3d-vrml": { - source: "iana", - extensions: ["x3dv"] - }, - "multipart/alternative": { - source: "iana", - compressible: false - }, - "multipart/appledouble": { - source: "iana" - }, - "multipart/byteranges": { - source: "iana" - }, - "multipart/digest": { - source: "iana" - }, - "multipart/encrypted": { - source: "iana", - compressible: false - }, - "multipart/form-data": { - source: "iana", - compressible: false - }, - "multipart/header-set": { - source: "iana" - }, - "multipart/mixed": { - source: "iana" - }, - "multipart/multilingual": { - source: "iana" - }, - "multipart/parallel": { - source: "iana" - }, - "multipart/related": { - source: "iana", - compressible: false - }, - "multipart/report": { - source: "iana" - }, - "multipart/signed": { - source: "iana", - compressible: false - }, - "multipart/vnd.bint.med-plus": { - source: "iana" - }, - "multipart/voice-message": { - source: "iana" - }, - "multipart/x-mixed-replace": { - source: "iana" - }, - "text/1d-interleaved-parityfec": { - source: "iana" - }, - "text/cache-manifest": { - source: "iana", - compressible: true, - extensions: ["appcache", "manifest"] - }, - "text/calendar": { - source: "iana", - extensions: ["ics", "ifb"] - }, - "text/calender": { - compressible: true - }, - "text/cmd": { - compressible: true - }, - "text/coffeescript": { - extensions: ["coffee", "litcoffee"] - }, - "text/cql": { - source: "iana" - }, - "text/cql-expression": { - source: "iana" - }, - "text/cql-identifier": { - source: "iana" - }, - "text/css": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["css"] - }, - "text/csv": { - source: "iana", - compressible: true, - extensions: ["csv"] - }, - "text/csv-schema": { - source: "iana" - }, - "text/directory": { - source: "iana" - }, - "text/dns": { - source: "iana" - }, - "text/ecmascript": { - source: "iana" - }, - "text/encaprtp": { - source: "iana" - }, - "text/enriched": { - source: "iana" - }, - "text/fhirpath": { - source: "iana" - }, - "text/flexfec": { - source: "iana" - }, - "text/fwdred": { - source: "iana" - }, - "text/gff3": { - source: "iana" - }, - "text/grammar-ref-list": { - source: "iana" - }, - "text/html": { - source: "iana", - compressible: true, - extensions: ["html", "htm", "shtml"] - }, - "text/jade": { - extensions: ["jade"] - }, - "text/javascript": { - source: "iana", - compressible: true - }, - "text/jcr-cnd": { - source: "iana" - }, - "text/jsx": { - compressible: true, - extensions: ["jsx"] - }, - "text/less": { - compressible: true, - extensions: ["less"] - }, - "text/markdown": { - source: "iana", - compressible: true, - extensions: ["markdown", "md"] - }, - "text/mathml": { - source: "nginx", - extensions: ["mml"] - }, - "text/mdx": { - compressible: true, - extensions: ["mdx"] - }, - "text/mizar": { - source: "iana" - }, - "text/n3": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["n3"] - }, - "text/parameters": { - source: "iana", - charset: "UTF-8" - }, - "text/parityfec": { - source: "iana" - }, - "text/plain": { - source: "iana", - compressible: true, - extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] - }, - "text/provenance-notation": { - source: "iana", - charset: "UTF-8" - }, - "text/prs.fallenstein.rst": { - source: "iana" - }, - "text/prs.lines.tag": { - source: "iana", - extensions: ["dsc"] - }, - "text/prs.prop.logic": { - source: "iana" - }, - "text/raptorfec": { - source: "iana" - }, - "text/red": { - source: "iana" - }, - "text/rfc822-headers": { - source: "iana" - }, - "text/richtext": { - source: "iana", - compressible: true, - extensions: ["rtx"] - }, - "text/rtf": { - source: "iana", - compressible: true, - extensions: ["rtf"] - }, - "text/rtp-enc-aescm128": { - source: "iana" - }, - "text/rtploopback": { - source: "iana" - }, - "text/rtx": { - source: "iana" - }, - "text/sgml": { - source: "iana", - extensions: ["sgml", "sgm"] - }, - "text/shaclc": { - source: "iana" - }, - "text/shex": { - source: "iana", - extensions: ["shex"] - }, - "text/slim": { - extensions: ["slim", "slm"] - }, - "text/spdx": { - source: "iana", - extensions: ["spdx"] - }, - "text/strings": { - source: "iana" - }, - "text/stylus": { - extensions: ["stylus", "styl"] - }, - "text/t140": { - source: "iana" - }, - "text/tab-separated-values": { - source: "iana", - compressible: true, - extensions: ["tsv"] - }, - "text/troff": { - source: "iana", - extensions: ["t", "tr", "roff", "man", "me", "ms"] - }, - "text/turtle": { - source: "iana", - charset: "UTF-8", - extensions: ["ttl"] - }, - "text/ulpfec": { - source: "iana" - }, - "text/uri-list": { - source: "iana", - compressible: true, - extensions: ["uri", "uris", "urls"] - }, - "text/vcard": { - source: "iana", - compressible: true, - extensions: ["vcard"] - }, - "text/vnd.a": { - source: "iana" - }, - "text/vnd.abc": { - source: "iana" - }, - "text/vnd.ascii-art": { - source: "iana" - }, - "text/vnd.curl": { - source: "iana", - extensions: ["curl"] - }, - "text/vnd.curl.dcurl": { - source: "apache", - extensions: ["dcurl"] - }, - "text/vnd.curl.mcurl": { - source: "apache", - extensions: ["mcurl"] - }, - "text/vnd.curl.scurl": { - source: "apache", - extensions: ["scurl"] - }, - "text/vnd.debian.copyright": { - source: "iana", - charset: "UTF-8" - }, - "text/vnd.dmclientscript": { - source: "iana" - }, - "text/vnd.dvb.subtitle": { - source: "iana", - extensions: ["sub"] - }, - "text/vnd.esmertec.theme-descriptor": { - source: "iana", - charset: "UTF-8" - }, - "text/vnd.familysearch.gedcom": { - source: "iana", - extensions: ["ged"] - }, - "text/vnd.ficlab.flt": { - source: "iana" - }, - "text/vnd.fly": { - source: "iana", - extensions: ["fly"] - }, - "text/vnd.fmi.flexstor": { - source: "iana", - extensions: ["flx"] - }, - "text/vnd.gml": { - source: "iana" - }, - "text/vnd.graphviz": { - source: "iana", - extensions: ["gv"] - }, - "text/vnd.hans": { - source: "iana" - }, - "text/vnd.hgl": { - source: "iana" - }, - "text/vnd.in3d.3dml": { - source: "iana", - extensions: ["3dml"] - }, - "text/vnd.in3d.spot": { - source: "iana", - extensions: ["spot"] - }, - "text/vnd.iptc.newsml": { - source: "iana" - }, - "text/vnd.iptc.nitf": { - source: "iana" - }, - "text/vnd.latex-z": { - source: "iana" - }, - "text/vnd.motorola.reflex": { - source: "iana" - }, - "text/vnd.ms-mediapackage": { - source: "iana" - }, - "text/vnd.net2phone.commcenter.command": { - source: "iana" - }, - "text/vnd.radisys.msml-basic-layout": { - source: "iana" - }, - "text/vnd.senx.warpscript": { - source: "iana" - }, - "text/vnd.si.uricatalogue": { - source: "iana" - }, - "text/vnd.sosi": { - source: "iana" - }, - "text/vnd.sun.j2me.app-descriptor": { - source: "iana", - charset: "UTF-8", - extensions: ["jad"] - }, - "text/vnd.trolltech.linguist": { - source: "iana", - charset: "UTF-8" - }, - "text/vnd.wap.si": { - source: "iana" - }, - "text/vnd.wap.sl": { - source: "iana" - }, - "text/vnd.wap.wml": { - source: "iana", - extensions: ["wml"] - }, - "text/vnd.wap.wmlscript": { - source: "iana", - extensions: ["wmls"] - }, - "text/vtt": { - source: "iana", - charset: "UTF-8", - compressible: true, - extensions: ["vtt"] - }, - "text/x-asm": { - source: "apache", - extensions: ["s", "asm"] - }, - "text/x-c": { - source: "apache", - extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] - }, - "text/x-component": { - source: "nginx", - extensions: ["htc"] - }, - "text/x-fortran": { - source: "apache", - extensions: ["f", "for", "f77", "f90"] - }, - "text/x-gwt-rpc": { - compressible: true - }, - "text/x-handlebars-template": { - extensions: ["hbs"] - }, - "text/x-java-source": { - source: "apache", - extensions: ["java"] - }, - "text/x-jquery-tmpl": { - compressible: true - }, - "text/x-lua": { - extensions: ["lua"] - }, - "text/x-markdown": { - compressible: true, - extensions: ["mkd"] - }, - "text/x-nfo": { - source: "apache", - extensions: ["nfo"] - }, - "text/x-opml": { - source: "apache", - extensions: ["opml"] - }, - "text/x-org": { - compressible: true, - extensions: ["org"] - }, - "text/x-pascal": { - source: "apache", - extensions: ["p", "pas"] - }, - "text/x-processing": { - compressible: true, - extensions: ["pde"] - }, - "text/x-sass": { - extensions: ["sass"] - }, - "text/x-scss": { - extensions: ["scss"] - }, - "text/x-setext": { - source: "apache", - extensions: ["etx"] - }, - "text/x-sfv": { - source: "apache", - extensions: ["sfv"] - }, - "text/x-suse-ymp": { - compressible: true, - extensions: ["ymp"] - }, - "text/x-uuencode": { - source: "apache", - extensions: ["uu"] - }, - "text/x-vcalendar": { - source: "apache", - extensions: ["vcs"] - }, - "text/x-vcard": { - source: "apache", - extensions: ["vcf"] - }, - "text/xml": { - source: "iana", - compressible: true, - extensions: ["xml"] - }, - "text/xml-external-parsed-entity": { - source: "iana" - }, - "text/yaml": { - compressible: true, - extensions: ["yaml", "yml"] - }, - "video/1d-interleaved-parityfec": { - source: "iana" - }, - "video/3gpp": { - source: "iana", - extensions: ["3gp", "3gpp"] - }, - "video/3gpp-tt": { - source: "iana" - }, - "video/3gpp2": { - source: "iana", - extensions: ["3g2"] - }, - "video/av1": { - source: "iana" - }, - "video/bmpeg": { - source: "iana" - }, - "video/bt656": { - source: "iana" - }, - "video/celb": { - source: "iana" - }, - "video/dv": { - source: "iana" - }, - "video/encaprtp": { - source: "iana" - }, - "video/ffv1": { - source: "iana" - }, - "video/flexfec": { - source: "iana" - }, - "video/h261": { - source: "iana", - extensions: ["h261"] - }, - "video/h263": { - source: "iana", - extensions: ["h263"] - }, - "video/h263-1998": { - source: "iana" - }, - "video/h263-2000": { - source: "iana" - }, - "video/h264": { - source: "iana", - extensions: ["h264"] - }, - "video/h264-rcdo": { - source: "iana" - }, - "video/h264-svc": { - source: "iana" - }, - "video/h265": { - source: "iana" - }, - "video/iso.segment": { - source: "iana", - extensions: ["m4s"] - }, - "video/jpeg": { - source: "iana", - extensions: ["jpgv"] - }, - "video/jpeg2000": { - source: "iana" - }, - "video/jpm": { - source: "apache", - extensions: ["jpm", "jpgm"] - }, - "video/jxsv": { - source: "iana" - }, - "video/mj2": { - source: "iana", - extensions: ["mj2", "mjp2"] - }, - "video/mp1s": { - source: "iana" - }, - "video/mp2p": { - source: "iana" - }, - "video/mp2t": { - source: "iana", - extensions: ["ts"] - }, - "video/mp4": { - source: "iana", - compressible: false, - extensions: ["mp4", "mp4v", "mpg4"] - }, - "video/mp4v-es": { - source: "iana" - }, - "video/mpeg": { - source: "iana", - compressible: false, - extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] - }, - "video/mpeg4-generic": { - source: "iana" - }, - "video/mpv": { - source: "iana" - }, - "video/nv": { - source: "iana" - }, - "video/ogg": { - source: "iana", - compressible: false, - extensions: ["ogv"] - }, - "video/parityfec": { - source: "iana" - }, - "video/pointer": { - source: "iana" - }, - "video/quicktime": { - source: "iana", - compressible: false, - extensions: ["qt", "mov"] - }, - "video/raptorfec": { - source: "iana" - }, - "video/raw": { - source: "iana" - }, - "video/rtp-enc-aescm128": { - source: "iana" - }, - "video/rtploopback": { - source: "iana" - }, - "video/rtx": { - source: "iana" - }, - "video/scip": { - source: "iana" - }, - "video/smpte291": { - source: "iana" - }, - "video/smpte292m": { - source: "iana" - }, - "video/ulpfec": { - source: "iana" - }, - "video/vc1": { - source: "iana" - }, - "video/vc2": { - source: "iana" - }, - "video/vnd.cctv": { - source: "iana" - }, - "video/vnd.dece.hd": { - source: "iana", - extensions: ["uvh", "uvvh"] - }, - "video/vnd.dece.mobile": { - source: "iana", - extensions: ["uvm", "uvvm"] - }, - "video/vnd.dece.mp4": { - source: "iana" - }, - "video/vnd.dece.pd": { - source: "iana", - extensions: ["uvp", "uvvp"] - }, - "video/vnd.dece.sd": { - source: "iana", - extensions: ["uvs", "uvvs"] - }, - "video/vnd.dece.video": { - source: "iana", - extensions: ["uvv", "uvvv"] - }, - "video/vnd.directv.mpeg": { - source: "iana" - }, - "video/vnd.directv.mpeg-tts": { - source: "iana" - }, - "video/vnd.dlna.mpeg-tts": { - source: "iana" - }, - "video/vnd.dvb.file": { - source: "iana", - extensions: ["dvb"] - }, - "video/vnd.fvt": { - source: "iana", - extensions: ["fvt"] - }, - "video/vnd.hns.video": { - source: "iana" - }, - "video/vnd.iptvforum.1dparityfec-1010": { - source: "iana" - }, - "video/vnd.iptvforum.1dparityfec-2005": { - source: "iana" - }, - "video/vnd.iptvforum.2dparityfec-1010": { - source: "iana" - }, - "video/vnd.iptvforum.2dparityfec-2005": { - source: "iana" - }, - "video/vnd.iptvforum.ttsavc": { - source: "iana" - }, - "video/vnd.iptvforum.ttsmpeg2": { - source: "iana" - }, - "video/vnd.motorola.video": { - source: "iana" - }, - "video/vnd.motorola.videop": { - source: "iana" - }, - "video/vnd.mpegurl": { - source: "iana", - extensions: ["mxu", "m4u"] - }, - "video/vnd.ms-playready.media.pyv": { - source: "iana", - extensions: ["pyv"] - }, - "video/vnd.nokia.interleaved-multimedia": { - source: "iana" - }, - "video/vnd.nokia.mp4vr": { - source: "iana" - }, - "video/vnd.nokia.videovoip": { - source: "iana" - }, - "video/vnd.objectvideo": { - source: "iana" - }, - "video/vnd.radgamettools.bink": { - source: "iana" - }, - "video/vnd.radgamettools.smacker": { - source: "iana" - }, - "video/vnd.sealed.mpeg1": { - source: "iana" - }, - "video/vnd.sealed.mpeg4": { - source: "iana" - }, - "video/vnd.sealed.swf": { - source: "iana" - }, - "video/vnd.sealedmedia.softseal.mov": { - source: "iana" - }, - "video/vnd.uvvu.mp4": { - source: "iana", - extensions: ["uvu", "uvvu"] - }, - "video/vnd.vivo": { - source: "iana", - extensions: ["viv"] - }, - "video/vnd.youtube.yt": { - source: "iana" - }, - "video/vp8": { - source: "iana" - }, - "video/vp9": { - source: "iana" - }, - "video/webm": { - source: "apache", - compressible: false, - extensions: ["webm"] - }, - "video/x-f4v": { - source: "apache", - extensions: ["f4v"] - }, - "video/x-fli": { - source: "apache", - extensions: ["fli"] - }, - "video/x-flv": { - source: "apache", - compressible: false, - extensions: ["flv"] - }, - "video/x-m4v": { - source: "apache", - extensions: ["m4v"] - }, - "video/x-matroska": { - source: "apache", - compressible: false, - extensions: ["mkv", "mk3d", "mks"] - }, - "video/x-mng": { - source: "apache", - extensions: ["mng"] - }, - "video/x-ms-asf": { - source: "apache", - extensions: ["asf", "asx"] - }, - "video/x-ms-vob": { - source: "apache", - extensions: ["vob"] - }, - "video/x-ms-wm": { - source: "apache", - extensions: ["wm"] - }, - "video/x-ms-wmv": { - source: "apache", - compressible: false, - extensions: ["wmv"] - }, - "video/x-ms-wmx": { - source: "apache", - extensions: ["wmx"] - }, - "video/x-ms-wvx": { - source: "apache", - extensions: ["wvx"] - }, - "video/x-msvideo": { - source: "apache", - extensions: ["avi"] - }, - "video/x-sgi-movie": { - source: "apache", - extensions: ["movie"] - }, - "video/x-smv": { - source: "apache", - extensions: ["smv"] - }, - "x-conference/x-cooltalk": { - source: "apache", - extensions: ["ice"] - }, - "x-shader/x-fragment": { - compressible: true - }, - "x-shader/x-vertex": { - compressible: true - } - }; - } -}); - -// node_modules/mime-db/index.js -var require_mime_db = __commonJS({ - "node_modules/mime-db/index.js"(exports2, module2) { - module2.exports = require_db(); - } -}); - -// node_modules/form-data/node_modules/mime-types/index.js -var require_mime_types = __commonJS({ - "node_modules/form-data/node_modules/mime-types/index.js"(exports2) { - "use strict"; - var db = require_mime_db(); - var extname = require("path").extname; - var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; - var TEXT_TYPE_REGEXP = /^text\//i; - exports2.charset = charset; - exports2.charsets = { lookup: charset }; - exports2.contentType = contentType; - exports2.extension = extension; - exports2.extensions = /* @__PURE__ */ Object.create(null); - exports2.lookup = lookup; - exports2.types = /* @__PURE__ */ Object.create(null); - populateMaps(exports2.extensions, exports2.types); - function charset(type) { - if (!type || typeof type !== "string") { - return false; - } - var match = EXTRACT_TYPE_REGEXP.exec(type); - var mime = match && db[match[1].toLowerCase()]; - if (mime && mime.charset) { - return mime.charset; - } - if (match && TEXT_TYPE_REGEXP.test(match[1])) { - return "UTF-8"; - } - return false; - } - function contentType(str) { - if (!str || typeof str !== "string") { - return false; - } - var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str; - if (!mime) { - return false; - } - if (mime.indexOf("charset") === -1) { - var charset2 = exports2.charset(mime); - if (charset2) - mime += "; charset=" + charset2.toLowerCase(); - } - return mime; - } - function extension(type) { - if (!type || typeof type !== "string") { - return false; - } - var match = EXTRACT_TYPE_REGEXP.exec(type); - var exts = match && exports2.extensions[match[1].toLowerCase()]; - if (!exts || !exts.length) { - return false; - } - return exts[0]; - } - function lookup(path) { - if (!path || typeof path !== "string") { - return false; - } - var extension2 = extname("x." + path).toLowerCase().substr(1); - if (!extension2) { - return false; - } - return exports2.types[extension2] || false; - } - function populateMaps(extensions, types) { - var preference = ["nginx", "apache", void 0, "iana"]; - Object.keys(db).forEach(function forEachMimeType(type) { - var mime = db[type]; - var exts = mime.extensions; - if (!exts || !exts.length) { - return; - } - extensions[type] = exts; - for (var i = 0; i < exts.length; i++) { - var extension2 = exts[i]; - if (types[extension2]) { - var from = preference.indexOf(db[types[extension2]].source); - var to = preference.indexOf(mime.source); - if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) { - continue; - } - } - types[extension2] = type; - } - }); - } - } -}); - -// node_modules/asynckit/lib/defer.js -var require_defer = __commonJS({ - "node_modules/asynckit/lib/defer.js"(exports2, module2) { - module2.exports = defer; - function defer(fn) { - var nextTick = typeof setImmediate == "function" ? setImmediate : typeof process == "object" && typeof process.nextTick == "function" ? process.nextTick : null; - if (nextTick) { - nextTick(fn); - } else { - setTimeout(fn, 0); - } - } - } -}); - -// node_modules/asynckit/lib/async.js -var require_async = __commonJS({ - "node_modules/asynckit/lib/async.js"(exports2, module2) { - var defer = require_defer(); - module2.exports = async; - function async(callback) { - var isAsync = false; - defer(function() { - isAsync = true; - }); - return function async_callback(err, result) { - if (isAsync) { - callback(err, result); - } else { - defer(function nextTick_callback() { - callback(err, result); - }); - } - }; - } - } -}); - -// node_modules/asynckit/lib/abort.js -var require_abort = __commonJS({ - "node_modules/asynckit/lib/abort.js"(exports2, module2) { - module2.exports = abort; - function abort(state) { - Object.keys(state.jobs).forEach(clean.bind(state)); - state.jobs = {}; - } - function clean(key) { - if (typeof this.jobs[key] == "function") { - this.jobs[key](); - } - } - } -}); - -// node_modules/asynckit/lib/iterate.js -var require_iterate = __commonJS({ - "node_modules/asynckit/lib/iterate.js"(exports2, module2) { - var async = require_async(); - var abort = require_abort(); - module2.exports = iterate; - function iterate(list, iterator, state, callback) { - var key = state["keyedList"] ? state["keyedList"][state.index] : state.index; - state.jobs[key] = runJob(iterator, key, list[key], function(error, output) { - if (!(key in state.jobs)) { - return; - } - delete state.jobs[key]; - if (error) { - abort(state); - } else { - state.results[key] = output; - } - callback(error, state.results); - }); - } - function runJob(iterator, key, item, callback) { - var aborter; - if (iterator.length == 2) { - aborter = iterator(item, async(callback)); - } else { - aborter = iterator(item, key, async(callback)); - } - return aborter; - } - } -}); - -// node_modules/asynckit/lib/state.js -var require_state = __commonJS({ - "node_modules/asynckit/lib/state.js"(exports2, module2) { - module2.exports = state; - function state(list, sortMethod) { - var isNamedList = !Array.isArray(list), initState = { - index: 0, - keyedList: isNamedList || sortMethod ? Object.keys(list) : null, - jobs: {}, - results: isNamedList ? {} : [], - size: isNamedList ? Object.keys(list).length : list.length - }; - if (sortMethod) { - initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) { - return sortMethod(list[a], list[b]); - }); - } - return initState; - } - } -}); - -// node_modules/asynckit/lib/terminator.js -var require_terminator = __commonJS({ - "node_modules/asynckit/lib/terminator.js"(exports2, module2) { - var abort = require_abort(); - var async = require_async(); - module2.exports = terminator; - function terminator(callback) { - if (!Object.keys(this.jobs).length) { - return; - } - this.index = this.size; - abort(this); - async(callback)(null, this.results); - } - } -}); - -// node_modules/asynckit/parallel.js -var require_parallel = __commonJS({ - "node_modules/asynckit/parallel.js"(exports2, module2) { - var iterate = require_iterate(); - var initState = require_state(); - var terminator = require_terminator(); - module2.exports = parallel; - function parallel(list, iterator, callback) { - var state = initState(list); - while (state.index < (state["keyedList"] || list).length) { - iterate(list, iterator, state, function(error, result) { - if (error) { - callback(error, result); - return; - } - if (Object.keys(state.jobs).length === 0) { - callback(null, state.results); - return; - } - }); - state.index++; - } - return terminator.bind(state, callback); - } - } -}); - -// node_modules/asynckit/serialOrdered.js -var require_serialOrdered = __commonJS({ - "node_modules/asynckit/serialOrdered.js"(exports2, module2) { - var iterate = require_iterate(); - var initState = require_state(); - var terminator = require_terminator(); - module2.exports = serialOrdered; - module2.exports.ascending = ascending; - module2.exports.descending = descending; - function serialOrdered(list, iterator, sortMethod, callback) { - var state = initState(list, sortMethod); - iterate(list, iterator, state, function iteratorHandler(error, result) { - if (error) { - callback(error, result); - return; - } - state.index++; - if (state.index < (state["keyedList"] || list).length) { - iterate(list, iterator, state, iteratorHandler); - return; - } - callback(null, state.results); - }); - return terminator.bind(state, callback); - } - function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : 0; - } - function descending(a, b) { - return -1 * ascending(a, b); - } - } -}); - -// node_modules/asynckit/serial.js -var require_serial = __commonJS({ - "node_modules/asynckit/serial.js"(exports2, module2) { - var serialOrdered = require_serialOrdered(); - module2.exports = serial; - function serial(list, iterator, callback) { - return serialOrdered(list, iterator, null, callback); - } - } -}); - -// node_modules/asynckit/index.js -var require_asynckit = __commonJS({ - "node_modules/asynckit/index.js"(exports2, module2) { - module2.exports = { - parallel: require_parallel(), - serial: require_serial(), - serialOrdered: require_serialOrdered() - }; - } -}); - -// node_modules/form-data/lib/populate.js -var require_populate = __commonJS({ - "node_modules/form-data/lib/populate.js"(exports2, module2) { - module2.exports = function(dst, src) { - Object.keys(src).forEach(function(prop) { - dst[prop] = dst[prop] || src[prop]; - }); - return dst; - }; - } -}); - -// node_modules/form-data/lib/form_data.js -var require_form_data = __commonJS({ - "node_modules/form-data/lib/form_data.js"(exports2, module2) { - var CombinedStream = require_combined_stream(); - var util = require("util"); - var path = require("path"); - var http = require("http"); - var https = require("https"); - var parseUrl = require("url").parse; - var fs = require("fs"); - var Stream = require("stream").Stream; - var mime = require_mime_types(); - var asynckit = require_asynckit(); - var populate = require_populate(); - module2.exports = FormData2; - util.inherits(FormData2, CombinedStream); - function FormData2(options) { - if (!(this instanceof FormData2)) { - return new FormData2(options); - } - this._overheadLength = 0; - this._valueLength = 0; - this._valuesToMeasure = []; - CombinedStream.call(this); - options = options || {}; - for (var option in options) { - this[option] = options[option]; - } - } - FormData2.LINE_BREAK = "\r\n"; - FormData2.DEFAULT_CONTENT_TYPE = "application/octet-stream"; - FormData2.prototype.append = function(field, value, options) { - options = options || {}; - if (typeof options == "string") { - options = { filename: options }; - } - var append = CombinedStream.prototype.append.bind(this); - if (typeof value == "number") { - value = "" + value; - } - if (util.isArray(value)) { - this._error(new Error("Arrays are not supported.")); - return; - } - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(); - append(header); - append(value); - append(footer); - this._trackLength(header, value, options); - }; - FormData2.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === "string") { - valueLength = Buffer.byteLength(value); - } - this._valueLength += valueLength; - this._overheadLength += Buffer.byteLength(header) + FormData2.LINE_BREAK.length; - if (!value || !value.path && !(value.readable && value.hasOwnProperty("httpVersion")) && !(value instanceof Stream)) { - return; - } - if (!options.knownLength) { - this._valuesToMeasure.push(value); - } - }; - FormData2.prototype._lengthRetriever = function(value, callback) { - if (value.hasOwnProperty("fd")) { - if (value.end != void 0 && value.end != Infinity && value.start != void 0) { - callback(null, value.end + 1 - (value.start ? value.start : 0)); - } else { - fs.stat(value.path, function(err, stat) { - var fileSize; - if (err) { - callback(err); - return; - } - fileSize = stat.size - (value.start ? value.start : 0); - callback(null, fileSize); - }); - } - } else if (value.hasOwnProperty("httpVersion")) { - callback(null, +value.headers["content-length"]); - } else if (value.hasOwnProperty("httpModule")) { - value.on("response", function(response) { - value.pause(); - callback(null, +response.headers["content-length"]); - }); - value.resume(); - } else { - callback("Unknown stream"); - } - }; - FormData2.prototype._multiPartHeader = function(field, value, options) { - if (typeof options.header == "string") { - return options.header; - } - var contentDisposition = this._getContentDisposition(value, options); - var contentType = this._getContentType(value, options); - var contents = ""; - var headers = { - "Content-Disposition": ["form-data", 'name="' + field + '"'].concat(contentDisposition || []), - "Content-Type": [].concat(contentType || []) - }; - if (typeof options.header == "object") { - populate(headers, options.header); - } - var header; - for (var prop in headers) { - if (!headers.hasOwnProperty(prop)) - continue; - header = headers[prop]; - if (header == null) { - continue; - } - if (!Array.isArray(header)) { - header = [header]; - } - if (header.length) { - contents += prop + ": " + header.join("; ") + FormData2.LINE_BREAK; - } - } - return "--" + this.getBoundary() + FormData2.LINE_BREAK + contents + FormData2.LINE_BREAK; - }; - FormData2.prototype._getContentDisposition = function(value, options) { - var filename, contentDisposition; - if (typeof options.filepath === "string") { - filename = path.normalize(options.filepath).replace(/\\/g, "/"); - } else if (options.filename || value.name || value.path) { - filename = path.basename(options.filename || value.name || value.path); - } else if (value.readable && value.hasOwnProperty("httpVersion")) { - filename = path.basename(value.client._httpMessage.path || ""); - } - if (filename) { - contentDisposition = 'filename="' + filename + '"'; - } - return contentDisposition; - }; - FormData2.prototype._getContentType = function(value, options) { - var contentType = options.contentType; - if (!contentType && value.name) { - contentType = mime.lookup(value.name); - } - if (!contentType && value.path) { - contentType = mime.lookup(value.path); - } - if (!contentType && value.readable && value.hasOwnProperty("httpVersion")) { - contentType = value.headers["content-type"]; - } - if (!contentType && (options.filepath || options.filename)) { - contentType = mime.lookup(options.filepath || options.filename); - } - if (!contentType && typeof value == "object") { - contentType = FormData2.DEFAULT_CONTENT_TYPE; - } - return contentType; - }; - FormData2.prototype._multiPartFooter = function() { - return function(next) { - var footer = FormData2.LINE_BREAK; - var lastPart = this._streams.length === 0; - if (lastPart) { - footer += this._lastBoundary(); - } - next(footer); - }.bind(this); - }; - FormData2.prototype._lastBoundary = function() { - return "--" + this.getBoundary() + "--" + FormData2.LINE_BREAK; - }; - FormData2.prototype.getHeaders = function(userHeaders) { - var header; - var formHeaders = { - "content-type": "multipart/form-data; boundary=" + this.getBoundary() - }; - for (header in userHeaders) { - if (userHeaders.hasOwnProperty(header)) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - } - return formHeaders; - }; - FormData2.prototype.setBoundary = function(boundary) { - this._boundary = boundary; - }; - FormData2.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - return this._boundary; - }; - FormData2.prototype.getBuffer = function() { - var dataBuffer = new Buffer.alloc(0); - var boundary = this.getBoundary(); - for (var i = 0, len = this._streams.length; i < len; i++) { - if (typeof this._streams[i] !== "function") { - if (Buffer.isBuffer(this._streams[i])) { - dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]); - } else { - dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]); - } - if (typeof this._streams[i] !== "string" || this._streams[i].substring(2, boundary.length + 2) !== boundary) { - dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData2.LINE_BREAK)]); - } - } - } - return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]); - }; - FormData2.prototype._generateBoundary = function() { - var boundary = "--------------------------"; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - this._boundary = boundary; - }; - FormData2.prototype.getLengthSync = function() { - var knownLength = this._overheadLength + this._valueLength; - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - if (!this.hasKnownLength()) { - this._error(new Error("Cannot calculate proper length in synchronous way.")); - } - return knownLength; - }; - FormData2.prototype.hasKnownLength = function() { - var hasKnownLength = true; - if (this._valuesToMeasure.length) { - hasKnownLength = false; - } - return hasKnownLength; - }; - FormData2.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - if (!this._valuesToMeasure.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { - if (err) { - cb(err); - return; - } - values.forEach(function(length) { - knownLength += length; - }); - cb(null, knownLength); - }); - }; - FormData2.prototype.submit = function(params, cb) { - var request, options, defaults = { method: "post" }; - if (typeof params == "string") { - params = parseUrl(params); - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname, - protocol: params.protocol - }, defaults); - } else { - options = populate(params, defaults); - if (!options.port) { - options.port = options.protocol == "https:" ? 443 : 80; - } - } - options.headers = this.getHeaders(params.headers); - if (options.protocol == "https:") { - request = https.request(options); - } else { - request = http.request(options); - } - this.getLength(function(err, length) { - if (err && err !== "Unknown stream") { - this._error(err); - return; - } - if (length) { - request.setHeader("Content-Length", length); - } - this.pipe(request); - if (cb) { - var onResponse; - var callback = function(error, responce) { - request.removeListener("error", callback); - request.removeListener("response", onResponse); - return cb.call(this, error, responce); - }; - onResponse = callback.bind(this, null); - request.on("error", callback); - request.on("response", onResponse); - } - }.bind(this)); - return request; - }; - FormData2.prototype._error = function(err) { - if (!this.error) { - this.error = err; - this.pause(); - this.emit("error", err); - } - }; - FormData2.prototype.toString = function() { - return "[object FormData]"; - }; - } -}); - -// node_modules/axios/lib/defaults/env/FormData.js -var require_FormData = __commonJS({ - "node_modules/axios/lib/defaults/env/FormData.js"(exports2, module2) { - module2.exports = require_form_data(); - } -}); - -// node_modules/axios/lib/defaults/index.js -var require_defaults = __commonJS({ - "node_modules/axios/lib/defaults/index.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var normalizeHeaderName = require_normalizeHeaderName(); - var AxiosError = require_AxiosError(); - var transitionalDefaults = require_transitional(); - var toFormData = require_toFormData(); - var DEFAULT_CONTENT_TYPE = { - "Content-Type": "application/x-www-form-urlencoded" - }; - function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers["Content-Type"])) { - headers["Content-Type"] = value; - } - } - function getDefaultAdapter() { - var adapter; - if (typeof XMLHttpRequest !== "undefined") { - adapter = require_xhr(); - } else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") { - adapter = require_http(); - } - return adapter; - } - function stringifySafely(rawValue, parser, encoder) { - if (utils.isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return utils.trim(rawValue); - } catch (e) { - if (e.name !== "SyntaxError") { - throw e; - } - } - } - return (encoder || JSON.stringify)(rawValue); - } - var defaults = { - transitional: transitionalDefaults, - adapter: getDefaultAdapter(), - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, "Accept"); - normalizeHeaderName(headers, "Content-Type"); - if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, "application/x-www-form-urlencoded;charset=utf-8"); - return data.toString(); - } - var isObjectPayload = utils.isObject(data); - var contentType = headers && headers["Content-Type"]; - var isFileList; - if ((isFileList = utils.isFileList(data)) || isObjectPayload && contentType === "multipart/form-data") { - var _FormData = this.env && this.env.FormData; - return toFormData(isFileList ? { "files[]": data } : data, _FormData && new _FormData()); - } else if (isObjectPayload || contentType === "application/json") { - setContentTypeIfUnset(headers, "application/json"); - return stringifySafely(data); - } - return data; - }], - transformResponse: [function transformResponse(data) { - var transitional = this.transitional || defaults.transitional; - var silentJSONParsing = transitional && transitional.silentJSONParsing; - var forcedJSONParsing = transitional && transitional.forcedJSONParsing; - var strictJSONParsing = !silentJSONParsing && this.responseType === "json"; - if (strictJSONParsing || forcedJSONParsing && utils.isString(data) && data.length) { - try { - return JSON.parse(data); - } catch (e) { - if (strictJSONParsing) { - if (e.name === "SyntaxError") { - throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); - } - throw e; - } - } - } - return data; - }], - timeout: 0, - xsrfCookieName: "XSRF-TOKEN", - xsrfHeaderName: "X-XSRF-TOKEN", - maxContentLength: -1, - maxBodyLength: -1, - env: { - FormData: require_FormData() - }, - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - }, - headers: { - common: { - "Accept": "application/json, text/plain, */*" - } - } - }; - utils.forEach(["delete", "get", "head"], function forEachMethodNoData(method) { - defaults.headers[method] = {}; - }); - utils.forEach(["post", "put", "patch"], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); - }); - module2.exports = defaults; - } -}); - -// node_modules/axios/lib/core/transformData.js -var require_transformData = __commonJS({ - "node_modules/axios/lib/core/transformData.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var defaults = require_defaults(); - module2.exports = function transformData(data, headers, fns) { - var context = this || defaults; - utils.forEach(fns, function transform(fn) { - data = fn.call(context, data, headers); - }); - return data; - }; - } -}); - -// node_modules/axios/lib/cancel/isCancel.js -var require_isCancel = __commonJS({ - "node_modules/axios/lib/cancel/isCancel.js"(exports2, module2) { - "use strict"; - module2.exports = function isCancel(value) { - return !!(value && value.__CANCEL__); - }; - } -}); - -// node_modules/axios/lib/core/dispatchRequest.js -var require_dispatchRequest = __commonJS({ - "node_modules/axios/lib/core/dispatchRequest.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var transformData = require_transformData(); - var isCancel = require_isCancel(); - var defaults = require_defaults(); - var CanceledError = require_CanceledError(); - function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } - if (config.signal && config.signal.aborted) { - throw new CanceledError(); - } - } - module2.exports = function dispatchRequest(config) { - throwIfCancellationRequested(config); - config.headers = config.headers || {}; - config.data = transformData.call(config, config.data, config.headers, config.transformRequest); - config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers); - utils.forEach(["delete", "get", "head", "post", "put", "patch", "common"], function cleanHeaderConfig(method) { - delete config.headers[method]; - }); - var adapter = config.adapter || defaults.adapter; - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - response.data = transformData.call(config, response.data, response.headers, config.transformResponse); - return response; - }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { - throwIfCancellationRequested(config); - if (reason && reason.response) { - reason.response.data = transformData.call(config, reason.response.data, reason.response.headers, config.transformResponse); - } - } - return Promise.reject(reason); - }); - }; - } -}); - -// node_modules/axios/lib/core/mergeConfig.js -var require_mergeConfig = __commonJS({ - "node_modules/axios/lib/core/mergeConfig.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - module2.exports = function mergeConfig(config1, config2) { - config2 = config2 || {}; - var config = {}; - function getMergedValue(target, source) { - if (utils.isPlainObject(target) && utils.isPlainObject(source)) { - return utils.merge(target, source); - } else if (utils.isPlainObject(source)) { - return utils.merge({}, source); - } else if (utils.isArray(source)) { - return source.slice(); - } - return source; - } - function mergeDeepProperties(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(config1[prop], config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(void 0, config1[prop]); - } - } - function valueFromConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(void 0, config2[prop]); - } - } - function defaultToConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(void 0, config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(void 0, config1[prop]); - } - } - function mergeDirectKeys(prop) { - if (prop in config2) { - return getMergedValue(config1[prop], config2[prop]); - } else if (prop in config1) { - return getMergedValue(void 0, config1[prop]); - } - } - var mergeMap = { - "url": valueFromConfig2, - "method": valueFromConfig2, - "data": valueFromConfig2, - "baseURL": defaultToConfig2, - "transformRequest": defaultToConfig2, - "transformResponse": defaultToConfig2, - "paramsSerializer": defaultToConfig2, - "timeout": defaultToConfig2, - "timeoutMessage": defaultToConfig2, - "withCredentials": defaultToConfig2, - "adapter": defaultToConfig2, - "responseType": defaultToConfig2, - "xsrfCookieName": defaultToConfig2, - "xsrfHeaderName": defaultToConfig2, - "onUploadProgress": defaultToConfig2, - "onDownloadProgress": defaultToConfig2, - "decompress": defaultToConfig2, - "maxContentLength": defaultToConfig2, - "maxBodyLength": defaultToConfig2, - "beforeRedirect": defaultToConfig2, - "transport": defaultToConfig2, - "httpAgent": defaultToConfig2, - "httpsAgent": defaultToConfig2, - "cancelToken": defaultToConfig2, - "socketPath": defaultToConfig2, - "responseEncoding": defaultToConfig2, - "validateStatus": mergeDirectKeys - }; - utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { - var merge = mergeMap[prop] || mergeDeepProperties; - var configValue = merge(prop); - utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); - }); - return config; - }; - } -}); - -// node_modules/axios/lib/helpers/validator.js -var require_validator = __commonJS({ - "node_modules/axios/lib/helpers/validator.js"(exports2, module2) { - "use strict"; - var VERSION = require_data().version; - var AxiosError = require_AxiosError(); - var validators = {}; - ["object", "boolean", "number", "function", "string", "symbol"].forEach(function(type, i) { - validators[type] = function validator(thing) { - return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type; - }; - }); - var deprecatedWarnings = {}; - validators.transitional = function transitional(validator, version, message) { - function formatMessage(opt, desc) { - return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : ""); - } - return function(value, opt, opts) { - if (validator === false) { - throw new AxiosError(formatMessage(opt, " has been removed" + (version ? " in " + version : "")), AxiosError.ERR_DEPRECATED); - } - if (version && !deprecatedWarnings[opt]) { - deprecatedWarnings[opt] = true; - console.warn(formatMessage(opt, " has been deprecated since v" + version + " and will be removed in the near future")); - } - return validator ? validator(value, opt, opts) : true; - }; - }; - function assertOptions(options, schema, allowUnknown) { - if (typeof options !== "object") { - throw new AxiosError("options must be an object", AxiosError.ERR_BAD_OPTION_VALUE); - } - var keys = Object.keys(options); - var i = keys.length; - while (i-- > 0) { - var opt = keys[i]; - var validator = schema[opt]; - if (validator) { - var value = options[opt]; - var result = value === void 0 || validator(value, opt, options); - if (result !== true) { - throw new AxiosError("option " + opt + " must be " + result, AxiosError.ERR_BAD_OPTION_VALUE); - } - continue; - } - if (allowUnknown !== true) { - throw new AxiosError("Unknown option " + opt, AxiosError.ERR_BAD_OPTION); - } - } - } - module2.exports = { - assertOptions, - validators - }; - } -}); - -// node_modules/axios/lib/core/Axios.js -var require_Axios = __commonJS({ - "node_modules/axios/lib/core/Axios.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var buildURL = require_buildURL(); - var InterceptorManager = require_InterceptorManager(); - var dispatchRequest = require_dispatchRequest(); - var mergeConfig = require_mergeConfig(); - var buildFullPath = require_buildFullPath(); - var validator = require_validator(); - var validators = validator.validators; - function Axios(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; - } - Axios.prototype.request = function request(configOrUrl, config) { - if (typeof configOrUrl === "string") { - config = config || {}; - config.url = configOrUrl; - } else { - config = configOrUrl || {}; - } - config = mergeConfig(this.defaults, config); - if (config.method) { - config.method = config.method.toLowerCase(); - } else if (this.defaults.method) { - config.method = this.defaults.method.toLowerCase(); - } else { - config.method = "get"; - } - var transitional = config.transitional; - if (transitional !== void 0) { - validator.assertOptions(transitional, { - silentJSONParsing: validators.transitional(validators.boolean), - forcedJSONParsing: validators.transitional(validators.boolean), - clarifyTimeoutError: validators.transitional(validators.boolean) - }, false); - } - var requestInterceptorChain = []; - var synchronousRequestInterceptors = true; - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) { - return; - } - synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; - requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - var responseInterceptorChain = []; - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); - }); - var promise; - if (!synchronousRequestInterceptors) { - var chain = [dispatchRequest, void 0]; - Array.prototype.unshift.apply(chain, requestInterceptorChain); - chain = chain.concat(responseInterceptorChain); - promise = Promise.resolve(config); - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - return promise; - } - var newConfig = config; - while (requestInterceptorChain.length) { - var onFulfilled = requestInterceptorChain.shift(); - var onRejected = requestInterceptorChain.shift(); - try { - newConfig = onFulfilled(newConfig); - } catch (error) { - onRejected(error); - break; - } - } - try { - promise = dispatchRequest(newConfig); - } catch (error) { - return Promise.reject(error); - } - while (responseInterceptorChain.length) { - promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); - } - return promise; - }; - Axios.prototype.getUri = function getUri(config) { - config = mergeConfig(this.defaults, config); - var fullPath = buildFullPath(config.baseURL, config.url); - return buildURL(fullPath, config.params, config.paramsSerializer); - }; - utils.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) { - Axios.prototype[method] = function(url, config) { - return this.request(mergeConfig(config || {}, { - method, - url, - data: (config || {}).data - })); - }; - }); - utils.forEach(["post", "put", "patch"], function forEachMethodWithData(method) { - function generateHTTPMethod(isForm) { - return function httpMethod(url, data, config) { - return this.request(mergeConfig(config || {}, { - method, - headers: isForm ? { - "Content-Type": "multipart/form-data" - } : {}, - url, - data - })); - }; - } - Axios.prototype[method] = generateHTTPMethod(); - Axios.prototype[method + "Form"] = generateHTTPMethod(true); - }); - module2.exports = Axios; - } -}); - -// node_modules/axios/lib/cancel/CancelToken.js -var require_CancelToken = __commonJS({ - "node_modules/axios/lib/cancel/CancelToken.js"(exports2, module2) { - "use strict"; - var CanceledError = require_CanceledError(); - function CancelToken(executor) { - if (typeof executor !== "function") { - throw new TypeError("executor must be a function."); - } - var resolvePromise; - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - var token = this; - this.promise.then(function(cancel) { - if (!token._listeners) - return; - var i; - var l = token._listeners.length; - for (i = 0; i < l; i++) { - token._listeners[i](cancel); - } - token._listeners = null; - }); - this.promise.then = function(onfulfilled) { - var _resolve; - var promise = new Promise(function(resolve) { - token.subscribe(resolve); - _resolve = resolve; - }).then(onfulfilled); - promise.cancel = function reject() { - token.unsubscribe(_resolve); - }; - return promise; - }; - executor(function cancel(message) { - if (token.reason) { - return; - } - token.reason = new CanceledError(message); - resolvePromise(token.reason); - }); - } - CancelToken.prototype.throwIfRequested = function throwIfRequested() { - if (this.reason) { - throw this.reason; - } - }; - CancelToken.prototype.subscribe = function subscribe(listener) { - if (this.reason) { - listener(this.reason); - return; - } - if (this._listeners) { - this._listeners.push(listener); - } else { - this._listeners = [listener]; - } - }; - CancelToken.prototype.unsubscribe = function unsubscribe(listener) { - if (!this._listeners) { - return; - } - var index = this._listeners.indexOf(listener); - if (index !== -1) { - this._listeners.splice(index, 1); - } - }; - CancelToken.source = function source() { - var cancel; - var token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token, - cancel - }; - }; - module2.exports = CancelToken; - } -}); - -// node_modules/axios/lib/helpers/spread.js -var require_spread = __commonJS({ - "node_modules/axios/lib/helpers/spread.js"(exports2, module2) { - "use strict"; - module2.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; - }; - } -}); - -// node_modules/axios/lib/helpers/isAxiosError.js -var require_isAxiosError = __commonJS({ - "node_modules/axios/lib/helpers/isAxiosError.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - module2.exports = function isAxiosError(payload) { - return utils.isObject(payload) && payload.isAxiosError === true; - }; - } -}); - -// node_modules/axios/lib/axios.js -var require_axios = __commonJS({ - "node_modules/axios/lib/axios.js"(exports2, module2) { - "use strict"; - var utils = require_utils(); - var bind = require_bind(); - var Axios = require_Axios(); - var mergeConfig = require_mergeConfig(); - var defaults = require_defaults(); - function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - utils.extend(instance, Axios.prototype, context); - utils.extend(instance, context); - instance.create = function create(instanceConfig) { - return createInstance(mergeConfig(defaultConfig, instanceConfig)); - }; - return instance; - } - var axios2 = createInstance(defaults); - axios2.Axios = Axios; - axios2.CanceledError = require_CanceledError(); - axios2.CancelToken = require_CancelToken(); - axios2.isCancel = require_isCancel(); - axios2.VERSION = require_data().version; - axios2.toFormData = require_toFormData(); - axios2.AxiosError = require_AxiosError(); - axios2.Cancel = axios2.CanceledError; - axios2.all = function all(promises) { - return Promise.all(promises); - }; - axios2.spread = require_spread(); - axios2.isAxiosError = require_isAxiosError(); - module2.exports = axios2; - module2.exports.default = axios2; - } -}); - -// node_modules/axios/index.js -var require_axios2 = __commonJS({ - "node_modules/axios/index.js"(exports2, module2) { - module2.exports = require_axios(); - } -}); - -// node_modules/@overextended/oxmysql/MySQL.js -var require_MySQL = __commonJS({ - "node_modules/@overextended/oxmysql/MySQL.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.oxmysql = void 0; - var QueryStore = []; - function assert(condition, message) { - if (!condition) - throw new TypeError(message); - } - var safeArgs = (query, params, cb, transaction) => { - if (typeof query === "number") - query = QueryStore[query]; - if (transaction) { - assert(typeof query === "object", `First argument expected object, recieved ${typeof query}`); - } else { - assert(typeof query === "string", `First argument expected string, received ${typeof query}`); - } - if (params) { - const paramType = typeof params; - assert(paramType === "object" || paramType === "function", `Second argument expected object or function, received ${paramType}`); - if (!cb && paramType === "function") { - cb = params; - params = void 0; - } - } - if (cb !== void 0) - assert(typeof cb === "function", `Third argument expected function, received ${typeof cb}`); - return [query, params, cb]; - }; - var exp2 = global.exports.oxmysql; - var currentResourceName = GetCurrentResourceName(); - function execute(method, query, params) { - return new Promise((resolve, reject) => { - exp2[method](query, params, (result, error) => { - if (error) - return reject(error); - resolve(result); - }, currentResourceName, true); - }); - } - exports2.oxmysql = { - store(query) { - assert(typeof query !== "string", `Query expects a string, received ${typeof query}`); - return QueryStore.push(query); - }, - ready(callback) { - setImmediate(async () => { - while (GetResourceState("oxmysql") !== "started") - await new Promise((resolve) => setTimeout(resolve, 50)); - callback(); - }); - }, - async query(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("query", query, params); - return cb ? cb(result) : result; - }, - async single(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("single", query, params); - return cb ? cb(result) : result; - }, - async scalar(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("scalar", query, params); - return cb ? cb(result) : result; - }, - async update(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("update", query, params); - return cb ? cb(result) : result; - }, - async insert(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("insert", query, params); - return cb ? cb(result) : result; - }, - async prepare(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb); - const result = await execute("prepare", query, params); - return cb ? cb(result) : result; - }, - async transaction(query, params, cb) { - [query, params, cb] = safeArgs(query, params, cb, true); - const result = await execute("transaction", query, params); - return cb ? cb(result) : result; - } - }; - } -}); - -// server/server.ts -var import_axios = __toESM(require_axios2()); -var import_oxmysql = __toESM(require_MySQL()); - -// node_modules/@project-error/pe-utils/lib/common/helpers.js -function PrefixedUUID(iterator) { - return `${iterator.toString(36)}-${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(36)}`; -} - -// node_modules/@project-error/pe-utils/lib/server/sv_utils.js -var ServerUtils = class { - constructor(settings) { - this.uidCounter = 0; - this._utilSettings = { - debugMode: false, - rpcTimeout: 1e4 - }; - this._utilSettings = Object.assign(Object.assign({}, this._utilSettings), settings); - } - debugLog(...args) { - if (!this._utilSettings.debugMode) - return; - console.log(`^3[SvUtils]^1`, ...args); - } - onNetPromise(eventName, callback) { - onNet(eventName, (respEventName, data) => { - const src = global.source; - const promiseRequest = { - source: src, - data - }; - this.debugLog(`NetPromise received for ${eventName}, src: ${src}`); - this.debugLog("Data:", data); - const promiseResp = (data2) => { - this.debugLog(`PromiseResp: s m = ${src}, e = ${respEventName}`); - this.debugLog(`RetData`, data2); - emitNet(respEventName, src, data2); - }; - Promise.resolve(callback(promiseRequest, promiseResp)).catch((e) => { - console.error(`Error in onNetPromise (${eventName}), ERROR: ${e.message}`); - promiseResp({ status: "error", errorMsg: "UNKNOWN_ERROR" }); - }); - }); - } - callClientRPC(eventName, src, data) { - return new Promise((resolve, reject) => { - let hasTimedout = false; - setTimeout(() => { - hasTimedout = true; - reject(`RPC Call: ${eventName} timed out after ${this._utilSettings.rpcTimeout}`); - }, this._utilSettings.rpcTimeout); - const uniqId = PrefixedUUID(this.uidCounter++); - const listenEventName = `${eventName}:${uniqId}`; - emitNet(eventName, src, listenEventName, data); - const handleClientResp = (data2) => { - removeEventListener(listenEventName, handleClientResp); - if (hasTimedout) - return; - resolve(data2); - }; - onNet(listenEventName, handleClientResp); - }); - } -}; - -// server/framework.ts -var exp = global.exports; -var ESX = null; -var QBCore = null; -var FRAMEWORK; -if (GetResourceState("qb-core") === "started") - FRAMEWORK = "qb"; -if (GetResourceState("es_extended") === "started") - FRAMEWORK = "esx"; -switch (FRAMEWORK) { - case "esx": - ESX = exp["es_extended"].getSharedObject(); - break; - case "qb": - QBCore = exp["qb-core"].GetCoreObject(); - break; - default: - console.log("[npwd_crypto] ERROR: No framework detected"); - break; -} -var Round2DP = (num) => Math.round((num + Number.EPSILON) * 100) / 100; -var FrameworkWrapper = class { - constructor(framework) { - this.framework = framework; - } - giveCryptos(source, amount) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - player.addAccountMoney("crypto", Round2DP(amount)); - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - player.Functions.AddMoney("crypto", Round2DP(amount)); - } - } - giveBank(source, amount) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - player.addAccountMoney("bank", amount); - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - player.Functions.AddMoney("bank", amount); - } - } - takeCryptos(source, amount) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - player.removeAccountMoney("crypto", Round2DP(amount)); - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - player.Functions.RemoveMoney("crypto", Round2DP(amount)); - } - } - takeBank(source, amount) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - player.removeAccountMoney("bank", amount); - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - player.Functions.RemoveMoney("bank", amount); - } - } - getCryptos(source) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - return player.getAccount("crypto").money; - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - return player.PlayerData.money["crypto"]; - } - } - getBank(source) { - if (this.framework === "esx") { - const player = ESX.GetPlayerFromId(source); - return player.getAccount("bank").money; - } else if (this.framework === "qb") { - const player = QBCore.Functions.GetPlayer(source); - return player.PlayerData.money["bank"]; - } - } -}; -var fwWrapper = new FrameworkWrapper(FRAMEWORK); -var getIdentifier = (source) => { - if (FRAMEWORK === "esx") { - return ESX.GetPlayerFromId(source).identifier; - } else if (FRAMEWORK === "qb") { - return QBCore.Functions.GetPlayer(source).PlayerData.citizenid; - } -}; - -// server/config.ts -var CONFIG = JSON.parse(LoadResourceFile(GetCurrentResourceName(), "config.json")); - -// server/EventRateLimiter.ts -var EventRateLimiter = class { - constructor(timeBetweenReq = 250) { - this.rateLimits = /* @__PURE__ */ new Map(); - this.timeBetweenRequests = timeBetweenReq; - } - registerNewEvent(event, options) { - this.rateLimits.set(event, { limiters: /* @__PURE__ */ new Map(), options }); - } - isPlayerRateLimited(event, source) { - var _a; - return !!((_a = this.rateLimits) == null ? void 0 : _a.get(event).limiters.get(source)); - } - rateLimitPlayer(event, source) { - var _a; - let rateLimiter = this.rateLimits.get(event); - rateLimiter.limiters.set(source, true); - setTimeout(() => { - rateLimiter.limiters.delete(source); - }, ((_a = rateLimiter.options) == null ? void 0 : _a.rateLimit) || this.timeBetweenRequests); - } -}; - -// server/server.ts -var Utils = new ServerUtils(); -var RateLimiter = new EventRateLimiter(500); -var CryptoController = class { - constructor(max = 10) { - var _a; - this.history = (_a = JSON.parse(GetResourceKvpString("npwd_crypto_history"))) != null ? _a : []; - this.currentValue = GetResourceKvpFloat("npwd_crypto_value") || CONFIG.tick.min; - this.maxHistory = max; - } - updateValue(value) { - return __async(this, null, function* () { - if (this.history.length === this.maxHistory) - this.history.splice(0, 1); - this.history.push(value); - this.currentValue = value; - console.log(`[npwd_crypto]: Crypto is now valued at $${value}`); - yield this.log(); - this.save(); - }); - } - save() { - SetResourceKvp("npwd_crypto_history", JSON.stringify(this.history)); - SetResourceKvpFloat("npwd_crypto_value", this.currentValue); - } - log() { - return __async(this, null, function* () { - if (!CONFIG.logging.enabled) - return; - const data = { - title: "NPWD Crypto Log", - color: 255, - footer: { - text: new Date().getTime() - }, - description: `Crypto is now worth ${this.currentValue}`, - author: { - name: "NPWD" - } - }; - yield import_axios.default.post(CONFIG.logging.webhook, { - embeds: [data] - }, { - headers: { - ["Content-Type"]: "application/json" - } - }); - }); - } - tick() { - return __async(this, null, function* () { - let current = this.currentValue; - let { min, max, upDownRatio, maxDeviation, crashChance } = CONFIG.tick; - const rand = Math.random(); - const amount = Math.floor(Math.random() * maxDeviation + 1); - if (rand <= crashChance) { - return yield this.updateValue(min); - } - if (rand <= upDownRatio) { - current += amount; - if (current > max) - current = max; - } else { - current -= amount; - if (current < min) - current = min; - } - yield this.updateValue(current); - }); - } -}; -var controller = new CryptoController(CONFIG.maxHistory); -var Transaction = class { - constructor(type, amount, identifier, sentTo) { - this.type = type; - this.amount = amount; - this.identifier = identifier; - this.sentTo = sentTo; - } - save() { - import_oxmysql.oxmysql.insert("INSERT INTO npwd_crypto_transactions (identifier, type, amount, worth, sentTo) VALUES (?, ?, ?, ?, ?)", [ - this.identifier, - this.type, - this.amount, - this.amount * controller.currentValue, - this.sentTo - ]); - } -}; -RateLimiter.registerNewEvent("npwd_crypto:buyCrypto"); -Utils.onNetPromise("npwd_crypto:buyCrypto", (req, res) => { - const amount = req.data.amount; - const src = req.source; - const isLimited = RateLimiter.isPlayerRateLimited("npwd_crypto:buyCrypto", src); - if (isLimited) - return res({ - status: "error", - data: { - reason: "Sending requests too quickly" - } - }); - RateLimiter.rateLimitPlayer("npwd_crypto:buyCrypto", src); - const playerBank = fwWrapper.getBank(src); - if (playerBank < amount) { - return res({ - status: "error", - data: { - reason: "Insufficient Bank Balance" - } - }); - } - const coins = amount / controller.currentValue; - fwWrapper.takeBank(src, amount); - fwWrapper.giveCryptos(src, coins); - res({ - status: "ok", - data: { - newBal: fwWrapper.getCryptos(src) - } - }); - new Transaction("bought", coins, getIdentifier(src)).save(); -}); -RateLimiter.registerNewEvent("npwd_crypto:sellCrypto"); -Utils.onNetPromise("npwd_crypto:sellCrypto", (req, res) => { - const amount = req.data.amount; - const src = req.source; - const isLimited = RateLimiter.isPlayerRateLimited("npwd_crypto:sellCrypto", src); - if (isLimited) - return res({ - status: "error", - data: { - reason: "Sending requests too quickly" - } - }); - RateLimiter.rateLimitPlayer("npwd_crypto:sellCrypto", src); - const playerCryptos = fwWrapper.getCryptos(src); - if (playerCryptos < amount) { - return res({ - status: "error", - data: { - reason: "Insufficient Crypto Portfolio" - } - }); - } - const worth = amount * controller.currentValue; - fwWrapper.takeCryptos(src, amount); - fwWrapper.giveBank(src, worth); - res({ - status: "ok", - data: { - newBal: fwWrapper.getCryptos(src) - } - }); - new Transaction("sold", amount, getIdentifier(src)).save(); -}); -RateLimiter.registerNewEvent("npwd_crypto:tradeCrypto"); -Utils.onNetPromise("npwd_crypto:tradeCrypto", (req, res) => { - const { amount, target } = req.data; - const src = req.source; - const isLimited = RateLimiter.isPlayerRateLimited("npwd_crypto:tradeCrypto", src); - if (isLimited) - return res({ - status: "error", - data: { - reason: "Sending requests too quickly" - } - }); - RateLimiter.rateLimitPlayer("npwd_crypto:tradeCrypto", src); - if (GetPlayerPing(target.toString()) <= 0) { - return res({ - status: "error", - data: { - reason: "Target Offline" - } - }); - } - const playerCryptos = fwWrapper.getCryptos(src); - if (playerCryptos <= amount) { - return res({ - status: "error", - data: { - reason: "Insufficient Crypto Portfolio" - } - }); - } - fwWrapper.takeCryptos(src, amount); - fwWrapper.giveCryptos(target, amount); - res({ - status: "ok", - data: { - newBal: fwWrapper.getCryptos(src) - } - }); - new Transaction("transferred", amount, getIdentifier(src), getIdentifier(target)).save(); -}); -Utils.onNetPromise("npwd_crypto:fetchCryptoData", (req, res) => { - res({ - status: "ok", - data: { - history: controller.history, - value: controller.currentValue, - balance: fwWrapper.getCryptos(req.source) - } - }); -}); -Utils.onNetPromise("npwd_crypto:fetchTransactionData", (req, res) => __async(exports, null, function* () { - const src = req.source; - const identifier = getIdentifier(src); - const rawData = yield import_oxmysql.oxmysql.query("SELECT * FROM npwd_crypto_transactions WHERE identifier = :identifier OR sentTo = :identifier ORDER BY UNIX_TIMESTAMP(createdAt) DESC", { - identifier - }); - const transactions = (rawData == null ? void 0 : rawData.map((data) => ({ - type: data.type, - amount: data.amount, - value: data.worth, - isReceiving: data.sentTo ? data.sentTo === identifier : null - }))) || []; - res({ - status: "ok", - data: transactions - }); -})); -setInterval(() => __async(exports, null, function* () { - yield controller.tick(); -}), CONFIG.tick.interval * 1e3 * 60); -import_oxmysql.oxmysql.ready(() => { - import_oxmysql.oxmysql.query("DELETE FROM npwd_crypto_transactions WHERE DATEDIFF(NOW(), createdAt) > 60"); -}); -RegisterCommand("manualsetcrypto", (source, args) => __async(exports, null, function* () { - if (source !== 0) - return; - const [valueRaw] = args; - const value = parseInt(valueRaw); - if (isNaN(value)) { - return console.log("[npwd_crypto]: Invalid crypto price"); - } - yield controller.updateValue(value); -}), true); -on("onResourceStop", (resourceName) => { - if (resourceName === GetCurrentResourceName()) { - controller.save(); - } -}); -/*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015-2022 Douglas Christopher Wilson - * MIT Licensed - */ -/*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ -//# sourceMappingURL=server.js.map diff --git a/server-data/resources/[phone]/npwd_crypto/dist/server.js.map b/server-data/resources/[phone]/npwd_crypto/dist/server.js.map deleted file mode 100644 index 3b36d5530..000000000 --- a/server-data/resources/[phone]/npwd_crypto/dist/server.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../node_modules/axios/lib/helpers/bind.js", "../node_modules/axios/lib/utils.js", "../node_modules/axios/lib/helpers/buildURL.js", "../node_modules/axios/lib/core/InterceptorManager.js", "../node_modules/axios/lib/helpers/normalizeHeaderName.js", "../node_modules/axios/lib/core/AxiosError.js", "../node_modules/axios/lib/defaults/transitional.js", "../node_modules/axios/lib/helpers/toFormData.js", "../node_modules/axios/lib/core/settle.js", "../node_modules/axios/lib/helpers/cookies.js", "../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../node_modules/axios/lib/helpers/combineURLs.js", "../node_modules/axios/lib/core/buildFullPath.js", "../node_modules/axios/lib/helpers/parseHeaders.js", "../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../node_modules/axios/lib/cancel/CanceledError.js", "../node_modules/axios/lib/helpers/parseProtocol.js", "../node_modules/axios/lib/adapters/xhr.js", "../node_modules/debug/node_modules/ms/index.js", "../node_modules/debug/src/debug.js", "../node_modules/debug/src/browser.js", "../node_modules/debug/src/node.js", "../node_modules/debug/src/index.js", "../node_modules/follow-redirects/debug.js", "../node_modules/follow-redirects/index.js", "../node_modules/axios/lib/env/data.js", "../node_modules/axios/lib/adapters/http.js", "../node_modules/delayed-stream/lib/delayed_stream.js", "../node_modules/combined-stream/lib/combined_stream.js", "../node_modules/mime-db/index.js", "../node_modules/form-data/node_modules/mime-types/index.js", "../node_modules/asynckit/lib/defer.js", "../node_modules/asynckit/lib/async.js", "../node_modules/asynckit/lib/abort.js", "../node_modules/asynckit/lib/iterate.js", "../node_modules/asynckit/lib/state.js", "../node_modules/asynckit/lib/terminator.js", "../node_modules/asynckit/parallel.js", "../node_modules/asynckit/serialOrdered.js", "../node_modules/asynckit/serial.js", "../node_modules/asynckit/index.js", "../node_modules/form-data/lib/populate.js", "../node_modules/form-data/lib/form_data.js", "../node_modules/axios/lib/defaults/env/FormData.js", "../node_modules/axios/lib/defaults/index.js", "../node_modules/axios/lib/core/transformData.js", "../node_modules/axios/lib/cancel/isCancel.js", "../node_modules/axios/lib/core/dispatchRequest.js", "../node_modules/axios/lib/core/mergeConfig.js", "../node_modules/axios/lib/helpers/validator.js", "../node_modules/axios/lib/core/Axios.js", "../node_modules/axios/lib/cancel/CancelToken.js", "../node_modules/axios/lib/helpers/spread.js", "../node_modules/axios/lib/helpers/isAxiosError.js", "../node_modules/axios/lib/axios.js", "../node_modules/axios/index.js", "../node_modules/@overextended/oxmysql/MySQL.ts", "../server/server.ts", "../node_modules/@project-error/pe-utils/src/common/helpers.ts", "../node_modules/@project-error/pe-utils/src/server/sv_utils.ts", "../server/framework.ts", "../server/config.ts", "../server/EventRateLimiter.ts"], - "sourcesContent": ["'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n", "'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n", "'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n", "'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n", "'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n", "'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n", "'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n", "'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n", "'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\"\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n self._processResponse(response);\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n abortRequest(this._currentRequest);\n this.emit(\"abort\");\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!(typeof data === \"string\" || typeof data === \"object\" && (\"length\" in data))) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (typeof data === \"function\") {\n callback = data;\n data = encoding = null;\n }\n else if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n this.emit(\"error\", new TypeError(\"Unsupported protocol \" + protocol));\n return;\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n // a client MUST send only the absolute path [\u2026] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, [\u2026]\n // a client MUST send the target URI in absolute-form [\u2026].\n this._currentUrl = this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n abortRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231\u00A76.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n this.emit(\"error\", new TooManyRedirectsError());\n return;\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231\u00A76.4: Automatic redirection needs to done with\n // care for methods not known to be safe, [\u2026]\n // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource [\u2026]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) [\u2026]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = url.parse(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Determine the URL of the redirection\n var redirectUrl;\n try {\n redirectUrl = url.resolve(currentUrl, location);\n }\n catch (cause) {\n this.emit(\"error\", new RedirectionError(cause));\n return;\n }\n\n // Create the redirected request\n debug(\"redirecting to\", redirectUrl);\n this._isRedirect = true;\n var redirectUrlParts = url.parse(redirectUrl);\n Object.assign(this._options, redirectUrlParts);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrlParts.protocol !== currentUrlParts.protocol &&\n redirectUrlParts.protocol !== \"https:\" ||\n redirectUrlParts.host !== currentHost &&\n !isSubdomain(redirectUrlParts.host, currentHost)) {\n removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (typeof beforeRedirect === \"function\") {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n try {\n beforeRedirect(this._options, responseDetails, requestDetails);\n }\n catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n try {\n this._performRequest();\n }\n catch (cause) {\n this.emit(\"error\", new RedirectionError(cause));\n }\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters\n if (typeof input === \"string\") {\n var urlStr = input;\n try {\n input = urlToOptions(new URL(urlStr));\n }\n catch (err) {\n /* istanbul ignore next */\n input = url.parse(urlStr);\n }\n }\n else if (URL && (input instanceof URL)) {\n input = urlToOptions(input);\n }\n else {\n callback = options;\n options = input;\n input = { protocol: protocol };\n }\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\n/* istanbul ignore next */\nfunction noop() { /* empty */ }\n\n// from https://github.com/nodejs/node/blob/master/lib/internal/url.js\nfunction urlToOptions(urlObject) {\n var options = {\n protocol: urlObject.protocol,\n hostname: urlObject.hostname.startsWith(\"[\") ?\n /* istanbul ignore next */\n urlObject.hostname.slice(1, -1) :\n urlObject.hostname,\n hash: urlObject.hash,\n search: urlObject.search,\n pathname: urlObject.pathname,\n path: urlObject.pathname + urlObject.search,\n href: urlObject.href,\n };\n if (urlObject.port !== \"\") {\n options.port = Number(urlObject.port);\n }\n return options;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, defaultMessage) {\n function CustomError(cause) {\n Error.captureStackTrace(this, this.constructor);\n if (!cause) {\n this.message = defaultMessage;\n }\n else {\n this.message = defaultMessage + \": \" + cause.message;\n this.cause = cause;\n }\n }\n CustomError.prototype = new Error();\n CustomError.prototype.constructor = CustomError;\n CustomError.prototype.name = \"Error [\" + code + \"]\";\n CustomError.prototype.code = code;\n return CustomError;\n}\n\nfunction abortRequest(request) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.abort();\n}\n\nfunction isSubdomain(subdomain, domain) {\n const dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "module.exports = {\n \"version\": \"0.27.2\"\n};", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildFullPath = require('../core/buildFullPath');\nvar buildURL = require('./../helpers/buildURL');\nvar http = require('http');\nvar https = require('https');\nvar httpFollow = require('follow-redirects').http;\nvar httpsFollow = require('follow-redirects').https;\nvar url = require('url');\nvar zlib = require('zlib');\nvar VERSION = require('./../env/data').version;\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\n\nvar isHttps = /https:?/;\n\nvar supportedProtocols = [ 'http:', 'https:', 'file:' ];\n\n/**\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} proxy\n * @param {string} location\n */\nfunction setProxy(options, proxy, location) {\n options.hostname = proxy.host;\n options.host = proxy.host;\n options.port = proxy.port;\n options.path = location;\n\n // Basic proxy authorization\n if (proxy.auth) {\n var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n // If a proxy is used, any redirects must also pass through the proxy\n options.beforeRedirect = function beforeRedirect(redirection) {\n redirection.headers.host = redirection.host;\n setProxy(redirection, proxy, redirection.href);\n };\n}\n\n/*eslint consistent-return:0*/\nmodule.exports = function httpAdapter(config) {\n return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n var resolve = function resolve(value) {\n done();\n resolvePromise(value);\n };\n var rejected = false;\n var reject = function reject(value) {\n done();\n rejected = true;\n rejectPromise(value);\n };\n var data = config.data;\n var headers = config.headers;\n var headerNames = {};\n\n Object.keys(headers).forEach(function storeLowerName(name) {\n headerNames[name.toLowerCase()] = name;\n });\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n if ('user-agent' in headerNames) {\n // User-Agent is specified; handle case where no UA header is desired\n if (!headers[headerNames['user-agent']]) {\n delete headers[headerNames['user-agent']];\n }\n // Otherwise, use specified value\n } else {\n // Only set header if it hasn't been set in config\n headers['User-Agent'] = 'axios/' + VERSION;\n }\n\n // support for https://www.npmjs.com/package/form-data api\n if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n Object.assign(headers, data.getHeaders());\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n if (!headerNames['content-length']) {\n headers['Content-Length'] = data.length;\n }\n }\n\n // HTTP basic authentication\n var auth = undefined;\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n // Parse url\n var fullPath = buildFullPath(config.baseURL, config.url);\n var parsed = url.parse(fullPath);\n var protocol = parsed.protocol || supportedProtocols[0];\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n if (!auth && parsed.auth) {\n var urlAuth = parsed.auth.split(':');\n var urlUsername = urlAuth[0] || '';\n var urlPassword = urlAuth[1] || '';\n auth = urlUsername + ':' + urlPassword;\n }\n\n if (auth && headerNames.authorization) {\n delete headers[headerNames.authorization];\n }\n\n var isHttpsRequest = isHttps.test(protocol);\n var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n try {\n buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\\?/, '');\n } catch (err) {\n var customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n reject(customErr);\n }\n\n var options = {\n path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\\?/, ''),\n method: config.method.toUpperCase(),\n headers: headers,\n agent: agent,\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth: auth\n };\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n }\n\n var proxy = config.proxy;\n if (!proxy && proxy !== false) {\n var proxyEnv = protocol.slice(0, -1) + '_proxy';\n var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];\n if (proxyUrl) {\n var parsedProxyUrl = url.parse(proxyUrl);\n var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;\n var shouldProxy = true;\n\n if (noProxyEnv) {\n var noProxy = noProxyEnv.split(',').map(function trim(s) {\n return s.trim();\n });\n\n shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {\n if (!proxyElement) {\n return false;\n }\n if (proxyElement === '*') {\n return true;\n }\n if (proxyElement[0] === '.' &&\n parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {\n return true;\n }\n\n return parsed.hostname === proxyElement;\n });\n }\n\n if (shouldProxy) {\n proxy = {\n host: parsedProxyUrl.hostname,\n port: parsedProxyUrl.port,\n protocol: parsedProxyUrl.protocol\n };\n\n if (parsedProxyUrl.auth) {\n var proxyUrlAuth = parsedProxyUrl.auth.split(':');\n proxy.auth = {\n username: proxyUrlAuth[0],\n password: proxyUrlAuth[1]\n };\n }\n }\n }\n }\n\n if (proxy) {\n options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');\n setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n var transport;\n var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsProxy ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirect = config.beforeRedirect;\n }\n transport = isHttpsProxy ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n var req = transport.request(options, function handleResponse(res) {\n if (req.aborted) return;\n\n // uncompress the response body transparently if required\n var stream = res;\n\n // return the last request in case of redirects\n var lastRequest = res.req || req;\n\n\n // if no content, is HEAD request or decompress disabled we should not decompress\n if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {\n switch (res.headers['content-encoding']) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'compress':\n case 'deflate':\n // add the unzipper to the body stream processing pipeline\n stream = stream.pipe(zlib.createUnzip());\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n }\n }\n\n var response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: res.headers,\n config: config,\n request: lastRequest\n };\n\n if (config.responseType === 'stream') {\n response.data = stream;\n settle(resolve, reject, response);\n } else {\n var responseBuffer = [];\n var totalResponseBytes = 0;\n stream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destoy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n stream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n stream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n stream.destroy();\n reject(new AxiosError(\n 'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n ));\n });\n\n stream.on('error', function handleStreamError(err) {\n if (req.aborted) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n stream.on('end', function handleStreamEnd() {\n try {\n var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (config.responseType !== 'arraybuffer') {\n responseData = responseData.toString(config.responseEncoding);\n if (!config.responseEncoding || config.responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n var timeout = parseInt(config.timeout, 10);\n\n if (isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devoring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n req.abort();\n var transitional = config.transitional || transitionalDefaults;\n reject(new AxiosError(\n 'timeout of ' + timeout + 'ms exceeded',\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n });\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (req.aborted) return;\n\n req.abort();\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n data.on('error', function handleStreamError(err) {\n reject(AxiosError.from(err, config, null, req));\n }).pipe(req);\n } else {\n req.end(data);\n }\n });\n};\n", "var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n", "var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n", "module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n", "var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n", "// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n", "var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n", "// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n", "var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n", "var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n", "module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n", "// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n", "var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity \u2013> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n", "// eslint-disable-next-line strict\nmodule.exports = require('form-data');\n", "'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n", "'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n", "'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n", "'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n", "'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n", "'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n", "module.exports = require('./lib/axios');", null, "import axios from 'axios'\nimport {oxmysql} from '@overextended/oxmysql'\nimport {ServerUtils} from \"@project-error/pe-utils\";\nimport {fwWrapper, getIdentifier} from \"./framework\";\nimport {CONFIG} from './config';\nimport {EventRateLimiter} from \"./EventRateLimiter\";\n\nconst Utils = new ServerUtils()\nconst RateLimiter = new EventRateLimiter(500)\n\nclass CryptoController {\n history: number[]\n maxHistory: number\n currentValue: number\n\n constructor(max = 10) {\n this.history = JSON.parse(GetResourceKvpString('npwd_crypto_history')) ?? []\n this.currentValue = GetResourceKvpFloat('npwd_crypto_value') || CONFIG.tick.min\n this.maxHistory = max\n }\n\n async updateValue(value: number) {\n if (this.history.length === this.maxHistory)\n this.history.splice(0, 1)\n\n this.history.push(value)\n this.currentValue = value\n\n console.log(`[npwd_crypto]: Crypto is now valued at $${value}`)\n\n await this.log()\n this.save()\n }\n\n save() {\n SetResourceKvp('npwd_crypto_history', JSON.stringify(this.history))\n SetResourceKvpFloat('npwd_crypto_value', this.currentValue)\n }\n\n async log() {\n if (!CONFIG.logging.enabled) return\n\n const data = {\n title: \"NPWD Crypto Log\",\n color: 255,\n footer: {\n text: new Date().getTime()\n },\n description: `Crypto is now worth ${this.currentValue}`,\n author: {\n name: \"NPWD\"\n }\n }\n\n await axios.post(CONFIG.logging.webhook, {\n embeds: [data]\n }, {\n headers: {\n ['Content-Type']: 'application/json'\n }\n })\n }\n\n async tick() {\n let current = this.currentValue;\n let {min, max, upDownRatio, maxDeviation, crashChance} = CONFIG.tick\n\n const rand = Math.random()\n const amount = Math.floor(Math.random() * maxDeviation + 1)\n\n // If price crashes, reset to minimum value\n if (rand <= crashChance) {\n return await this.updateValue(min)\n }\n\n // price increases if random is below our ratio\n // otherwise price will decrease\n if (rand <= upDownRatio) {\n current += amount\n if (current > max)\n current = max\n } else {\n current -= amount\n if (current < min)\n current = min\n }\n\n await this.updateValue(current)\n }\n}\n\nconst controller = new CryptoController(CONFIG.maxHistory)\n\nclass Transaction {\n constructor(\n public type: string,\n public amount: number,\n public identifier: string,\n public sentTo?: string\n ) {\n }\n\n save() {\n oxmysql.insert(\"INSERT INTO npwd_crypto_transactions (identifier, type, amount, worth, sentTo) VALUES (?, ?, ?, ?, ?)\", [\n this.identifier,\n this.type,\n this.amount,\n this.amount * controller.currentValue,\n this.sentTo\n ])\n }\n}\n\n\nRateLimiter.registerNewEvent('npwd_crypto:buyCrypto')\nUtils.onNetPromise<{ amount: number }>('npwd_crypto:buyCrypto', (req, res) => {\n const amount = req.data.amount\n const src = req.source\n const isLimited = RateLimiter.isPlayerRateLimited('npwd_crypto:buyCrypto', src)\n if (isLimited) return res({\n status: \"error\",\n data: {\n reason: \"Sending requests too quickly\"\n }\n })\n\n RateLimiter.rateLimitPlayer('npwd_crypto:buyCrypto', src)\n\n const playerBank = fwWrapper.getBank(src)\n if (playerBank < amount) {\n return res({\n status: \"error\",\n data: {\n reason: \"Insufficient Bank Balance\"\n }\n })\n }\n\n const coins = amount / controller.currentValue\n fwWrapper.takeBank(src, amount)\n fwWrapper.giveCryptos(src, coins)\n\n res({\n status: \"ok\",\n data: {\n newBal: fwWrapper.getCryptos(src)\n }\n })\n\n new Transaction('bought', coins, getIdentifier(src)).save()\n})\n\nRateLimiter.registerNewEvent('npwd_crypto:sellCrypto')\nUtils.onNetPromise<{ amount: number }>('npwd_crypto:sellCrypto', (req, res) => {\n const amount = req.data.amount\n const src = req.source\n\n const isLimited = RateLimiter.isPlayerRateLimited('npwd_crypto:sellCrypto', src)\n if (isLimited) return res({\n status: \"error\",\n data: {\n reason: \"Sending requests too quickly\"\n }\n })\n\n RateLimiter.rateLimitPlayer('npwd_crypto:sellCrypto', src)\n\n\n const playerCryptos = fwWrapper.getCryptos(src)\n if (playerCryptos < amount) {\n return res({\n status: \"error\",\n data: {\n reason: \"Insufficient Crypto Portfolio\"\n }\n })\n }\n\n const worth = amount * controller.currentValue\n fwWrapper.takeCryptos(src, amount)\n fwWrapper.giveBank(src, worth)\n\n res({\n status: \"ok\",\n data: {\n newBal: fwWrapper.getCryptos(src)\n }\n })\n\n new Transaction('sold', amount, getIdentifier(src)).save()\n})\n\nRateLimiter.registerNewEvent('npwd_crypto:tradeCrypto')\nUtils.onNetPromise<{ amount: number, target: number }>('npwd_crypto:tradeCrypto', (req, res) => {\n const {amount, target} = req.data\n const src = req.source\n\n const isLimited = RateLimiter.isPlayerRateLimited('npwd_crypto:tradeCrypto', src)\n if (isLimited) return res({\n status: \"error\",\n data: {\n reason: \"Sending requests too quickly\"\n }\n })\n\n RateLimiter.rateLimitPlayer('npwd_crypto:tradeCrypto', src)\n\n if (GetPlayerPing(target.toString()) <= 0) {\n return res({\n status: \"error\",\n data: {\n reason: \"Target Offline\"\n }\n })\n }\n\n const playerCryptos = fwWrapper.getCryptos(src)\n if (playerCryptos <= amount) {\n return res({\n status: \"error\",\n data: {\n reason: \"Insufficient Crypto Portfolio\"\n }\n })\n }\n\n fwWrapper.takeCryptos(src, amount)\n fwWrapper.giveCryptos(target, amount)\n\n res({\n status: \"ok\",\n data: {\n newBal: fwWrapper.getCryptos(src)\n }\n })\n\n new Transaction('transferred', amount, getIdentifier(src), getIdentifier(target)).save()\n})\n\nUtils.onNetPromise('npwd_crypto:fetchCryptoData', (req, res) => {\n res({\n status: \"ok\",\n data: {\n history: controller.history,\n value: controller.currentValue,\n balance: fwWrapper.getCryptos(req.source)\n }\n })\n})\n\nUtils.onNetPromise('npwd_crypto:fetchTransactionData', async (req, res) => {\n const src = req.source\n const identifier = getIdentifier(src)\n\n const rawData: RawTransaction[] = await oxmysql.query(\n 'SELECT * FROM npwd_crypto_transactions WHERE identifier = :identifier OR sentTo = :identifier ORDER BY UNIX_TIMESTAMP(createdAt) DESC',\n {\n identifier\n }\n )\n const transactions: DbTransaction[] = rawData?.map((data) => ({\n type: data.type,\n amount: data.amount,\n value: data.worth,\n isReceiving: data.sentTo ? data.sentTo === identifier : null\n })) || []\n\n res({\n status: \"ok\",\n data: transactions\n })\n})\n\nsetInterval(async () => {\n await controller.tick()\n}, CONFIG.tick.interval * 1000 * 60)\n\n// When server starts just yeet old records to stop db being full up\noxmysql.ready(() => {\n oxmysql.query('DELETE FROM npwd_crypto_transactions WHERE DATEDIFF(NOW(), createdAt) > 60')\n})\n\nRegisterCommand(\"manualsetcrypto\", async (source: number, args: string[]) => {\n if (source !== 0) return; // Rcon command\n\n const [valueRaw] = args;\n const value = parseInt(valueRaw)\n\n if (isNaN(value)) {\n return console.log(\"[npwd_crypto]: Invalid crypto price\")\n }\n\n await controller.updateValue(value)\n}, true)\n\non(\"onResourceStop\", (resourceName: string) => {\n if (resourceName === GetCurrentResourceName()) {\n controller.save()\n }\n})", null, null, "import {Server as ESXServer} from 'esx.js'\nimport {Server as QBServer} from 'qbcore.js'\nimport { CONFIG } from './config';\n\nconst exp = global.exports\n\nexport let ESX: ESXServer = null;\nexport let QBCore: QBServer = null;\n\nlet FRAMEWORK: 'qb' | 'esx'\nif (GetResourceState('qb-core') === 'started') FRAMEWORK = 'qb';\nif (GetResourceState('es_extended') === 'started') FRAMEWORK = 'esx';\n\nswitch (FRAMEWORK) {\n case 'esx':\n ESX = exp['es_extended'].getSharedObject();\n break;\n case 'qb':\n QBCore = exp['qb-core'].GetCoreObject();\n break;\n default:\n console.log(\"[npwd_crypto] ERROR: No framework detected\")\n break;\n}\n\nconst Round2DP = (num: number) => Math.round((num + Number.EPSILON) * 100) / 100\n\nclass FrameworkWrapper {\n constructor(public framework: string) {}\n\n giveCryptos(source: number, amount: number) {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n player.addAccountMoney('crypto', Round2DP(amount))\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n player.Functions.AddMoney('crypto', Round2DP(amount))\n }\n }\n\n giveBank(source: number, amount: number) {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n player.addAccountMoney('bank', amount)\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n player.Functions.AddMoney('bank', amount)\n }\n }\n\n takeCryptos(source: number, amount: number) {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n player.removeAccountMoney('crypto', Round2DP(amount))\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n player.Functions.RemoveMoney('crypto', Round2DP(amount))\n }\n }\n\n takeBank(source: number, amount: number) {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n player.removeAccountMoney('bank', amount)\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n player.Functions.RemoveMoney('bank', amount)\n }\n }\n\n getCryptos(source: number): number {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n return player.getAccount('crypto').money\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n return player.PlayerData.money['crypto']\n }\n }\n\n getBank(source: number): number {\n if (this.framework === \"esx\") {\n const player = ESX.GetPlayerFromId(source)\n return player.getAccount('bank').money\n } else if (this.framework === \"qb\") {\n const player = QBCore.Functions.GetPlayer(source)\n return player.PlayerData.money['bank']\n }\n }\n}\n\nexport const fwWrapper = new FrameworkWrapper(FRAMEWORK)\n\nexport const getIdentifier = (source: number) => {\n if (FRAMEWORK === \"esx\") {\n return ESX.GetPlayerFromId(source).identifier\n } else if (FRAMEWORK === \"qb\") {\n return QBCore.Functions.GetPlayer(source).PlayerData.citizenid\n }\n}", "export const CONFIG: Config = JSON.parse(LoadResourceFile(GetCurrentResourceName(), 'config.json'))", "interface Limiter {\n limiters: Map;\n options: LimiterOptions;\n}\n\nexport interface LimiterOptions {\n rateLimit?: number;\n}\n\nexport class EventRateLimiter {\n private rateLimits: Map = new Map();\n private timeBetweenRequests: number;\n constructor(timeBetweenReq: number = 250) {\n this.timeBetweenRequests = timeBetweenReq;\n }\n\n registerNewEvent(event: string, options?: LimiterOptions) {\n this.rateLimits.set(event, { limiters: new Map(), options });\n }\n\n isPlayerRateLimited(event: string, source: number) {\n return !!this.rateLimits?.get(event).limiters.get(source);\n }\n\n rateLimitPlayer(event: string, source: number) {\n let rateLimiter = this.rateLimits.get(event);\n rateLimiter.limiters.set(source, true);\n\n setTimeout(() => {\n rateLimiter.limiters.delete(source);\n }, rateLimiter.options?.rateLimit || this.timeBetweenRequests);\n }\n}"], - "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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", - "names": [] -} diff --git a/server-data/resources/[phone]/npwd_crypto/fxmanifest.lua b/server-data/resources/[phone]/npwd_crypto/fxmanifest.lua deleted file mode 100644 index 654983874..000000000 --- a/server-data/resources/[phone]/npwd_crypto/fxmanifest.lua +++ /dev/null @@ -1,12 +0,0 @@ -fx_version "cerulean" -game "gta5" - -client_script 'dist/client.js' -server_script 'dist/server.js' - -ui_page 'web/dist/index.html' - -files { - 'web/dist/index.html', - 'web/dist/*.js' -} diff --git a/server-data/resources/[phone]/npwd_crypto/import.sql b/server-data/resources/[phone]/npwd_crypto/import.sql deleted file mode 100644 index a8f165d74..000000000 --- a/server-data/resources/[phone]/npwd_crypto/import.sql +++ /dev/null @@ -1,12 +0,0 @@ --- auto-generated definition -create table npwd_crypto_transactions -( - id int auto_increment - primary key, - identifier varchar(20) null, - type varchar(20) null, - amount float null, - worth float null, - sentTo varchar(20) null, - createdAt timestamp default current_timestamp() null -); diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/208.js b/server-data/resources/[phone]/npwd_crypto/web/dist/208.js deleted file mode 100644 index d785986e8..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/208.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[208,387],{1642:(e,n,t)=>{n.__esModule=!0,n.NuiContext=void 0;var r=t(2950);n.NuiContext=r.createContext({removeHandler:function(){console.log("Failed to remove event. The context has not been initialized")},addHandler:function(){console.log("Failed to add event. The context has not been initialized")}})},6877:(e,n,t)=>{n.__esModule=!0,n.useNuiEvent=void 0;var r=t(2950),i=t(1642);n.useNuiEvent=function(e){var n,t=r.useContext(null!==(n=e.context)&&void 0!==n?n:i.NuiContext),o=r.useState(e.defaultValue),u=o[0],a=o[1];if(!t)throw new Error("useNuiEvent must be used inside the NuiProvider");if(!e.event)throw new Error("Cannot use NuiEvent on nothing.");return r.useEffect((function(){return t.addHandler(e.event,(function(n){a(n.data.payload),e.callback&&"function"==typeof e.callback&&e.callback(n.data.payload)})),function(){t.removeHandler(e.event)}}),[]),{data:u}}},4208:function(e,n,t){var r=this&&this.__createBinding||(Object.create?function(e,n,t,r){void 0===r&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return n[t]}})}:function(e,n,t,r){void 0===r&&(r=t),e[r]=n[t]}),i=this&&this.__exportStar||function(e,n){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(n,t)||r(n,e,t)};n.__esModule=!0,i(t(8841),n),i(t(1642),n),i(t(6877),n)},8841:function(e,n,t){var r=this&&this.__createBinding||(Object.create?function(e,n,t,r){void 0===r&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return n[t]}})}:function(e,n,t,r){void 0===r&&(r=t),e[r]=n[t]}),i=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&r(n,e,t);return i(n,e),n},u=this&&this.__spreadArray||function(e,n){for(var t=0,r=n.length,i=e.length;t0&&r.current[t].forEach((function(e){i("Running handler for",t),e(n)}))}else i("Returning! Event was invalid",n)};return a.useEffect((function(){return window.addEventListener("message",o),function(){return window.removeEventListener("message",o)}}),[]),a.default.createElement(t.Provider,{value:{addHandler:function(e,n){var t;i("Adding handler for event",e);var o=null!==(t=r.current[e])&&void 0!==t?t:[];i("Existing handlers",o),r.current[e]=u(u([],o),[n])},removeHandler:function(e){i("Removing handler for event",e),delete r.current[e]}}},e.children)}}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA4LmpzIiwibWFwcGluZ3MiOiI2R0FDQUEsRUFBUUMsWUFBYSxFQUNyQkQsRUFBUUUsZ0JBQWEsRUFDckIsSUFBSUMsRUFBVSxFQUFRLE1BQ3RCSCxFQUFRRSxXQUFhQyxFQUFRQyxjQUFjLENBQ3ZDQyxjQUFlLFdBQ1hDLFFBQVFDLElBQUksaUVBRWhCQyxXQUFZLFdBQ1JGLFFBQVFDLElBQUksaUUsZUNScEJQLEVBQVFDLFlBQWEsRUFDckJELEVBQVFTLGlCQUFjLEVBQ3RCLElBQUlOLEVBQVUsRUFBUSxNQUNsQk8sRUFBZSxFQUFRLE1Bd0IzQlYsRUFBUVMsWUF2QlIsU0FBcUJFLEdBQ2pCLElBQUlDLEVBQ0FDLEVBQVVWLEVBQVFXLFdBQXNDLFFBQTFCRixFQUFLRCxFQUFRRSxlQUE0QixJQUFQRCxFQUFnQkEsRUFBS0YsRUFBYVIsWUFDbEdhLEVBQUtaLEVBQVFhLFNBQVNMLEVBQVFNLGNBQWVDLEVBQU9ILEVBQUcsR0FBSUksRUFBVUosRUFBRyxHQUM1RSxJQUFLRixFQUNELE1BQU0sSUFBSU8sTUFBTSxtREFFcEIsSUFBS1QsRUFBUVUsTUFDVCxNQUFNLElBQUlELE1BQU0sbUNBYXBCLE9BWEFqQixFQUFRbUIsV0FBVSxXQU9kLE9BTkFULEVBQVFMLFdBQVdHLEVBQVFVLE9BQU8sU0FBVUEsR0FDeENGLEVBQVFFLEVBQU1ILEtBQUtLLFNBQ2ZaLEVBQVFhLFVBQXdDLG1CQUFyQmIsRUFBUWEsVUFDbkNiLEVBQVFhLFNBQVNILEVBQU1ILEtBQUtLLFlBRzdCLFdBQ0hWLEVBQVFSLGNBQWNNLEVBQVFVLFVBRW5DLElBQ0ksQ0FBRUgsS0FBTUEsSyxxQkN6Qm5CLElBQUlPLEVBQW1CQyxNQUFRQSxLQUFLRCxrQkFBcUJFLE9BQU9DLE9BQVMsU0FBVUMsRUFBR0MsRUFBR0MsRUFBR0MsUUFDN0VDLElBQVBELElBQWtCQSxFQUFLRCxHQUMzQkosT0FBT08sZUFBZUwsRUFBR0csRUFBSSxDQUFFRyxZQUFZLEVBQU1DLElBQUssV0FBYSxPQUFPTixFQUFFQyxPQUMzRSxTQUFVRixFQUFHQyxFQUFHQyxFQUFHQyxRQUNUQyxJQUFQRCxJQUFrQkEsRUFBS0QsR0FDM0JGLEVBQUVHLEdBQU1GLEVBQUVDLEtBRVZNLEVBQWdCWCxNQUFRQSxLQUFLVyxjQUFpQixTQUFTUCxFQUFHOUIsR0FDMUQsSUFBSyxJQUFJc0MsS0FBS1IsRUFBYSxZQUFOUSxHQUFvQlgsT0FBT1ksVUFBVUMsZUFBZUMsS0FBS3pDLEVBQVNzQyxJQUFJYixFQUFnQnpCLEVBQVM4QixFQUFHUSxJQUUzSHRDLEVBQVFDLFlBQWEsRUFDckJvQyxFQUFhLEVBQVEsTUFBMkJyQyxHQUNoRHFDLEVBQWEsRUFBUSxNQUF5QnJDLEdBQzlDcUMsRUFBYSxFQUFRLE1BQXdCckMsSSxxQkNiN0MsSUFBSXlCLEVBQW1CQyxNQUFRQSxLQUFLRCxrQkFBcUJFLE9BQU9DLE9BQVMsU0FBVUMsRUFBR0MsRUFBR0MsRUFBR0MsUUFDN0VDLElBQVBELElBQWtCQSxFQUFLRCxHQUMzQkosT0FBT08sZUFBZUwsRUFBR0csRUFBSSxDQUFFRyxZQUFZLEVBQU1DLElBQUssV0FBYSxPQUFPTixFQUFFQyxPQUMzRSxTQUFVRixFQUFHQyxFQUFHQyxFQUFHQyxRQUNUQyxJQUFQRCxJQUFrQkEsRUFBS0QsR0FDM0JGLEVBQUVHLEdBQU1GLEVBQUVDLEtBRVZXLEVBQXNCaEIsTUFBUUEsS0FBS2dCLHFCQUF3QmYsT0FBT0MsT0FBUyxTQUFVQyxFQUFHYyxHQUN4RmhCLE9BQU9PLGVBQWVMLEVBQUcsVUFBVyxDQUFFTSxZQUFZLEVBQU1TLE1BQU9ELEtBQzlELFNBQVNkLEVBQUdjLEdBQ2JkLEVBQVcsUUFBSWMsSUFFZkUsRUFBZ0JuQixNQUFRQSxLQUFLbUIsY0FBaUIsU0FBVUMsR0FDeEQsR0FBSUEsR0FBT0EsRUFBSTdDLFdBQVksT0FBTzZDLEVBQ2xDLElBQUlDLEVBQVMsR0FDYixHQUFXLE1BQVBELEVBQWEsSUFBSyxJQUFJZixLQUFLZSxFQUFlLFlBQU5mLEdBQW1CSixPQUFPWSxVQUFVQyxlQUFlQyxLQUFLSyxFQUFLZixJQUFJTixFQUFnQnNCLEVBQVFELEVBQUtmLEdBRXRJLE9BREFXLEVBQW1CSyxFQUFRRCxHQUNwQkMsR0FFUEMsRUFBaUJ0QixNQUFRQSxLQUFLc0IsZUFBa0IsU0FBVUMsRUFBSUMsR0FDOUQsSUFBSyxJQUFJQyxFQUFJLEVBQUdDLEVBQUtGLEVBQUtHLE9BQVFDLEVBQUlMLEVBQUdJLE9BQVFGLEVBQUlDLEVBQUlELElBQUtHLElBQzFETCxFQUFHSyxHQUFLSixFQUFLQyxHQUNqQixPQUFPRixHQUVYakQsRUFBUUMsWUFBYSxFQUNyQkQsRUFBUXVELGlCQUFjLEVBQ3RCLElBQUlwRCxFQUFVMEMsRUFBYSxFQUFRLE9BQy9CbkMsRUFBZSxFQUFRLE1BaUQzQlYsRUFBUXVELFlBaERVLFNBQVVDLEdBQ3hCLElBQUk1QyxFQUNBNkMsRUFBbUMsUUFBeEI3QyxFQUFLNEMsRUFBTTNDLGVBQTRCLElBQVBELEVBQWdCQSxFQUFLRixFQUFhUixXQUM3RXdELEVBQVd2RCxFQUFRd0QsT0FBTyxJQUMxQkMsRUFBUSxXQUVSLElBREEsSUFBSUMsRUFBTyxHQUNGQyxFQUFLLEVBQUdBLEVBQUtDLFVBQVVWLE9BQVFTLElBQ3BDRCxFQUFLQyxHQUFNQyxVQUFVRCxHQUVwQk4sRUFBTUksT0FHWHRELFFBQVFzRCxNQUFNQyxJQWFkRyxFQUFlLFNBQVUzQyxHQUV6QixHQURBdUMsRUFBTSxpQkFBa0J2QyxJQUNwQm1DLEVBQU1TLGVBQWtCVCxFQUFNUyxjQUFjNUMsR0FBaEQsQ0FJQSxJQUFJNkMsRUFBTzdDLEVBQU1ILEtBQUtnRCxLQUN0Qk4sRUFBTSx5Q0FBMENNLEdBQzVDUixFQUFTUyxTQUNUVCxFQUFTUyxRQUFRRCxJQUNqQlIsRUFBU1MsUUFBUUQsR0FBTWIsT0FBUyxHQUNoQ0ssRUFBU1MsUUFBUUQsR0FBTUUsU0FBUSxTQUFVQyxHQUNyQ1QsRUFBTSxzQkFBdUJNLEdBQzdCRyxFQUFRaEQsV0FWWnVDLEVBQU0sK0JBQWdDdkMsSUFrQjlDLE9BSkFsQixFQUFRbUIsV0FBVSxXQUVkLE9BREFnRCxPQUFPQyxpQkFBaUIsVUFBV1AsR0FDNUIsV0FBYyxPQUFPTSxPQUFPRSxvQkFBb0IsVUFBV1IsTUFDbkUsSUFDSzdELEVBQWlCLFFBQUVzRSxjQUFjaEIsRUFBUWlCLFNBQVUsQ0FBRTlCLE1BQU8sQ0FBRXBDLFdBaENyRCxTQUFVYSxFQUFPZ0QsR0FDOUIsSUFBSXpELEVBQ0pnRCxFQUFNLDJCQUE0QnZDLEdBQ2xDLElBQUlzRCxFQUFzRCxRQUFsQy9ELEVBQUs4QyxFQUFTUyxRQUFROUMsVUFBMkIsSUFBUFQsRUFBZ0JBLEVBQUssR0FDdkZnRCxFQUFNLG9CQUFxQmUsR0FDM0JqQixFQUFTUyxRQUFROUMsR0FBUzJCLEVBQWNBLEVBQWMsR0FBSTJCLEdBQW1CLENBQUNOLEtBMkJZaEUsY0F6QjFFLFNBQVVnQixHQUMxQnVDLEVBQU0sNkJBQThCdkMsVUFDN0JxQyxFQUFTUyxRQUFROUMsTUF1Qm9HbUMsRUFBTW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZml2ZW0taG9va3MvZGlzdC9jb250ZXh0L051aUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZml2ZW0taG9va3MvZGlzdC9ob29rcy91c2VOdWlFdmVudC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1maXZlbS1ob29rcy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpdmVtLWhvb2tzL2Rpc3QvcHJvdmlkZXIvTnVpUHJvdmlkZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5OdWlDb250ZXh0ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG5leHBvcnRzLk51aUNvbnRleHQgPSByZWFjdF8xLmNyZWF0ZUNvbnRleHQoe1xuICAgIHJlbW92ZUhhbmRsZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byByZW1vdmUgZXZlbnQuIFRoZSBjb250ZXh0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgIH0sXG4gICAgYWRkSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGFkZCBldmVudC4gVGhlIGNvbnRleHQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnVzZU51aUV2ZW50ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgTnVpQ29udGV4dF8xID0gcmVxdWlyZShcIi4uL2NvbnRleHQvTnVpQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZU51aUV2ZW50KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGNvbnRleHQgPSByZWFjdF8xLnVzZUNvbnRleHQoKF9hID0gb3B0aW9ucy5jb250ZXh0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOdWlDb250ZXh0XzEuTnVpQ29udGV4dCk7XG4gICAgdmFyIF9iID0gcmVhY3RfMS51c2VTdGF0ZShvcHRpb25zLmRlZmF1bHRWYWx1ZSksIGRhdGEgPSBfYlswXSwgc2V0RGF0YSA9IF9iWzFdO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZU51aUV2ZW50IG11c3QgYmUgdXNlZCBpbnNpZGUgdGhlIE51aVByb3ZpZGVyJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5ldmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgTnVpRXZlbnQgb24gbm90aGluZy4nKTtcbiAgICB9XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb250ZXh0LmFkZEhhbmRsZXIob3B0aW9ucy5ldmVudCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBzZXREYXRhKGV2ZW50LmRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYWxsYmFjayAmJiB0eXBlb2Ygb3B0aW9ucy5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2soZXZlbnQuZGF0YS5wYXlsb2FkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlbW92ZUhhbmRsZXIob3B0aW9ucy5ldmVudCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiB7IGRhdGE6IGRhdGEgfTtcbn1cbmV4cG9ydHMudXNlTnVpRXZlbnQgPSB1c2VOdWlFdmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3ZpZGVyL051aVByb3ZpZGVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0L051aUNvbnRleHRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzL3VzZU51aUV2ZW50XCIpLCBleHBvcnRzKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTnVpUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIE51aUNvbnRleHRfMSA9IHJlcXVpcmUoXCIuLi9jb250ZXh0L051aUNvbnRleHRcIik7XG52YXIgTnVpUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIENvbnRleHQgPSAoX2EgPSBwcm9wcy5jb250ZXh0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOdWlDb250ZXh0XzEuTnVpQ29udGV4dDtcbiAgICB2YXIgaGFuZGxlcnMgPSByZWFjdF8xLnVzZVJlZih7fSk7XG4gICAgdmFyIGRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJvcHMuZGVidWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmRlYnVnKGFyZ3MpO1xuICAgIH07XG4gICAgdmFyIGFkZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBkZWJ1ZygnQWRkaW5nIGhhbmRsZXIgZm9yIGV2ZW50JywgZXZlbnQpO1xuICAgICAgICB2YXIgZXhpc3RpbmdIYW5kbGVycyA9IChfYSA9IGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgZGVidWcoJ0V4aXN0aW5nIGhhbmRsZXJzJywgZXhpc3RpbmdIYW5kbGVycyk7XG4gICAgICAgIGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBleGlzdGluZ0hhbmRsZXJzKSwgW2hhbmRsZXJdKTtcbiAgICB9O1xuICAgIHZhciByZW1vdmVIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGRlYnVnKCdSZW1vdmluZyBoYW5kbGVyIGZvciBldmVudCcsIGV2ZW50KTtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdO1xuICAgIH07XG4gICAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnSGFuZGxpbmcgZXZlbnQnLCBldmVudCk7XG4gICAgICAgIGlmIChwcm9wcy52YWxpZGF0ZUV2ZW50ICYmICFwcm9wcy52YWxpZGF0ZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgZGVidWcoJ1JldHVybmluZyEgRXZlbnQgd2FzIGludmFsaWQnLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSBldmVudC5kYXRhLnR5cGU7XG4gICAgICAgIGRlYnVnKCdDaGVja2luZyBpZiB3ZSBzaG91bGQgaGFuZGxlIGV2ZW50IC4uICcsIHR5cGUpO1xuICAgICAgICBpZiAoaGFuZGxlcnMuY3VycmVudCAmJlxuICAgICAgICAgICAgaGFuZGxlcnMuY3VycmVudFt0eXBlXSAmJlxuICAgICAgICAgICAgaGFuZGxlcnMuY3VycmVudFt0eXBlXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5jdXJyZW50W3R5cGVdLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZygnUnVubmluZyBoYW5kbGVyIGZvcicsIHR5cGUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudEhhbmRsZXIpOyB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBhZGRIYW5kbGVyOiBhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyOiByZW1vdmVIYW5kbGVyIH0gfSwgcHJvcHMuY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLk51aVByb3ZpZGVyID0gTnVpUHJvdmlkZXI7XG4iXSwibmFtZXMiOlsiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJOdWlDb250ZXh0IiwicmVhY3RfMSIsImNyZWF0ZUNvbnRleHQiLCJyZW1vdmVIYW5kbGVyIiwiY29uc29sZSIsImxvZyIsImFkZEhhbmRsZXIiLCJ1c2VOdWlFdmVudCIsIk51aUNvbnRleHRfMSIsIm9wdGlvbnMiLCJfYSIsImNvbnRleHQiLCJ1c2VDb250ZXh0IiwiX2IiLCJ1c2VTdGF0ZSIsImRlZmF1bHRWYWx1ZSIsImRhdGEiLCJzZXREYXRhIiwiRXJyb3IiLCJldmVudCIsInVzZUVmZmVjdCIsInBheWxvYWQiLCJjYWxsYmFjayIsIl9fY3JlYXRlQmluZGluZyIsInRoaXMiLCJPYmplY3QiLCJjcmVhdGUiLCJvIiwibSIsImsiLCJrMiIsInVuZGVmaW5lZCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9fZXhwb3J0U3RhciIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwidmFsdWUiLCJfX2ltcG9ydFN0YXIiLCJtb2QiLCJyZXN1bHQiLCJfX3NwcmVhZEFycmF5IiwidG8iLCJmcm9tIiwiaSIsImlsIiwibGVuZ3RoIiwiaiIsIk51aVByb3ZpZGVyIiwicHJvcHMiLCJDb250ZXh0IiwiaGFuZGxlcnMiLCJ1c2VSZWYiLCJkZWJ1ZyIsImFyZ3MiLCJfaSIsImFyZ3VtZW50cyIsImV2ZW50SGFuZGxlciIsInZhbGlkYXRlRXZlbnQiLCJ0eXBlIiwiY3VycmVudCIsImZvckVhY2giLCJoYW5kbGVyIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiLCJleGlzdGluZ0hhbmRsZXJzIiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/250.js b/server-data/resources/[phone]/npwd_crypto/web/dist/250.js deleted file mode 100644 index dfc76516c..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/250.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[250],{4121:(e,n,t)=>{t.d(n,{y:()=>c,s:()=>a});var r=t(2950),l=t.n(r),o=t(9547),c=function(){return l().createElement(o.Z,{fontSize:"large"})},a=function(){return l().createElement(o.Z,{fontSize:"small"})}},9250:(e,n,t)=>{t.r(n),t.d(n,{default:()=>c});var r=t(4023),l=t(4121),o={en:"Crypto Exchange"};const c=function(e){var n;return{id:"CRYPTO",nameLocale:o[null!==(n=null==e?void 0:e.language)&&void 0!==n?n:"en"],color:"#fff",backgroundColor:"#ff7300",path:"/crypto",icon:l.y,notificationIcon:l.s,app:r.Z}}},4023:(e,n,t)=>{t.d(n,{Z:()=>O});var r=t(2950),l=t.n(r),o=t(5475),c=t(5662),a=t(3839),i=t.n(a),u=t(6501),f=t(4810),m=t(245),p=t(3971),d=t(1551),s=t(8087),h=t(2072),x=t(246),y=t(7951),b=t(2453),E=t(5210),g=t(9085),v=t(7030),S=t(3377),Z=function(e,n){return Object.defineProperty?Object.defineProperty(e,"raw",{value:n}):e.raw=n,e},w=function(){return w=Object.assign||function(e){for(var n,t=1,r=arguments.length;t{var t=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,u){for(var c,i,a=o(e),f=1;f{var n=r(7418),o=60103,u=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var c=60109,i=60110,a=60112;t.Suspense=60113;var f=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var s=Symbol.for;o=s("react.element"),u=s("react.portal"),t.Fragment=s("react.fragment"),t.StrictMode=s("react.strict_mode"),t.Profiler=s("react.profiler"),c=s("react.provider"),i=s("react.context"),a=s("react.forward_ref"),t.Suspense=s("react.suspense"),f=s("react.memo"),l=s("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function y(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{e.exports=r(2408)}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRyxPQUFPbUUsSUFBSTRDLE9BQU8vRyxJQUFJN0MsRUFBUTZKLFNBQVMsU0FBU2hILEdBQUcsT0FBT21FLElBQUk2QyxTQUFTaEgsSUFBSTdDLEVBQVE4SixRQUFRLHlCQ25CblQvSixFQUFPQyxRQUFVLEVBQWpCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOlsiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b09iamVjdCIsInZhbCIsIlR5cGVFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJhc3NpZ24iLCJ0ZXN0MSIsIlN0cmluZyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImkiLCJmcm9tQ2hhckNvZGUiLCJtYXAiLCJuIiwiam9pbiIsInRlc3QzIiwic3BsaXQiLCJmb3JFYWNoIiwibGV0dGVyIiwia2V5cyIsImVyciIsInNob3VsZFVzZU5hdGl2ZSIsInRhcmdldCIsInNvdXJjZSIsImZyb20iLCJzeW1ib2xzIiwidG8iLCJzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwia2V5IiwiY2FsbCIsImwiLCJwIiwiRnJhZ21lbnQiLCJTdHJpY3RNb2RlIiwiUHJvZmlsZXIiLCJxIiwiciIsInQiLCJTdXNwZW5zZSIsInUiLCJ2IiwiU3ltYm9sIiwiZm9yIiwidyIsIngiLCJpdGVyYXRvciIsInoiLCJhIiwiYiIsImMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJBIiwiaXNNb3VudGVkIiwiZW5xdWV1ZUZvcmNlVXBkYXRlIiwiZW5xdWV1ZVJlcGxhY2VTdGF0ZSIsImVucXVldWVTZXRTdGF0ZSIsIkIiLCJDIiwidGhpcyIsInByb3BzIiwiY29udGV4dCIsInJlZnMiLCJ1cGRhdGVyIiwiRCIsIkUiLCJpc1JlYWN0Q29tcG9uZW50Iiwic2V0U3RhdGUiLCJFcnJvciIsImZvcmNlVXBkYXRlIiwiRiIsImNvbnN0cnVjdG9yIiwiaXNQdXJlUmVhY3RDb21wb25lbnQiLCJHIiwiY3VycmVudCIsIkgiLCJJIiwicmVmIiwiX19zZWxmIiwiX19zb3VyY2UiLCJKIiwiZSIsImQiLCJrIiwiaCIsImciLCJjaGlsZHJlbiIsImYiLCJBcnJheSIsIm0iLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsInR5cGUiLCJfb3duZXIiLCJMIiwiTSIsIk4iLCJyZXBsYWNlIiwiZXNjYXBlIiwidG9TdHJpbmciLCJPIiwiaXNBcnJheSIsIksiLCJwdXNoIiwieSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJQIiwiUSIsIl9zdGF0dXMiLCJfcmVzdWx0IiwidGhlbiIsImRlZmF1bHQiLCJSIiwiUyIsIlQiLCJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwiUmVhY3RDdXJyZW50QmF0Y2hDb25maWciLCJ0cmFuc2l0aW9uIiwiUmVhY3RDdXJyZW50T3duZXIiLCJJc1NvbWVSZW5kZXJlckFjdGluZyIsIkNoaWxkcmVuIiwiYXBwbHkiLCJjb3VudCIsInRvQXJyYXkiLCJvbmx5IiwiQ29tcG9uZW50IiwiUHVyZUNvbXBvbmVudCIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlQ29udGV4dCIsIl9jYWxjdWxhdGVDaGFuZ2VkQml0cyIsIl9jdXJyZW50VmFsdWUiLCJfY3VycmVudFZhbHVlMiIsIl90aHJlYWRDb3VudCIsIlByb3ZpZGVyIiwiQ29uc3VtZXIiLCJfY29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVGYWN0b3J5IiwiYmluZCIsImNyZWF0ZVJlZiIsImZvcndhcmRSZWYiLCJyZW5kZXIiLCJpc1ZhbGlkRWxlbWVudCIsImxhenkiLCJfcGF5bG9hZCIsIl9pbml0IiwibWVtbyIsImNvbXBhcmUiLCJ1c2VDYWxsYmFjayIsInVzZUNvbnRleHQiLCJ1c2VEZWJ1Z1ZhbHVlIiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ2ZXJzaW9uIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/294.js.LICENSE.txt b/server-data/resources/[phone]/npwd_crypto/web/dist/294.js.LICENSE.txt deleted file mode 100644 index 21339c055..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/294.js.LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/376.js b/server-data/resources/[phone]/npwd_crypto/web/dist/376.js deleted file mode 100644 index ae87c3b1c..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/376.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[376,563],{5376:(e,t,n)=>{n.r(t),n.d(t,{Bar:()=>v,Bubble:()=>A,Chart:()=>p,Doughnut:()=>m,Line:()=>h,Pie:()=>y,PolarArea:()=>w,Radar:()=>C,Scatter:()=>R,getDatasetAtEvent:()=>d,getElementAtEvent:()=>f,getElementsAtEvent:()=>g});var r=n(2950),a=n.n(r),s=n(7e3);const o="label";function u(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function l(e,t){e.labels=t}function c(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o;const r=[];e.datasets=t.map((t=>{const a=e.datasets.find((e=>e[n]===t[n]));return a&&t.data&&!r.includes(a)?(r.push(a),Object.assign(a,t),a):{...t}}))}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;const n={labels:[],datasets:[]};return l(n,e.labels),c(n,e.datasets,t),n}function d(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"dataset",{intersect:!0},!1)}function f(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"nearest",{intersect:!0},!1)}function g(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"index",{intersect:!0},!1)}function b(e,t){let{height:n=150,width:o=300,redraw:d=!1,datasetIdKey:f,type:g,data:b,options:p,plugins:E=[],fallbackContent:h,updateMode:v,...C}=e;const m=(0,r.useRef)(null),w=(0,r.useRef)(),A=()=>{m.current&&(w.current=new s.Chart(m.current,{type:g,data:i(b,f),options:p&&{...p},plugins:E}),u(t,w.current))},y=()=>{u(t,null),w.current&&(w.current.destroy(),w.current=null)};return(0,r.useEffect)((()=>{var e,t;!d&&w.current&&p&&(e=w.current,t=p,Object.assign(e.options,t))}),[d,p]),(0,r.useEffect)((()=>{!d&&w.current&&l(w.current.config.data,b.labels)}),[d,b.labels]),(0,r.useEffect)((()=>{!d&&w.current&&b.datasets&&c(w.current.config.data,b.datasets,f)}),[d,b.datasets]),(0,r.useEffect)((()=>{w.current&&(d?(y(),setTimeout(A)):w.current.update(v))}),[d,p,b.labels,b.datasets,v]),(0,r.useEffect)((()=>{w.current&&(y(),setTimeout(A))}),[g]),(0,r.useEffect)((()=>(A(),()=>y())),[]),a().createElement("canvas",Object.assign({ref:m,role:"img",height:n,width:o},C),h)}const p=(0,r.forwardRef)(b);function E(e,t){return s.Chart.register(t),(0,r.forwardRef)(((t,n)=>a().createElement(p,Object.assign({},t,{ref:n,type:e}))))}const h=E("line",s.LineController),v=E("bar",s.BarController),C=E("radar",s.RadarController),m=E("doughnut",s.DoughnutController),w=E("polarArea",s.PolarAreaController),A=E("bubble",s.BubbleController),y=E("pie",s.PieController),R=E("scatter",s.ScatterController)}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bkIsRUFBS04sWUFFVCxJQUFBdUMsWUFBVSxLQUNETCxFQUFTN0MsVUFDVm9DLEdBQ0FZLElBQ0FLLFdBQVdQLElBRVhELEVBQVM3QyxRQUFRc0QsT0FBT2IsTUFFN0IsQ0FDQ0wsRUFDQUUsRUFDQXJCLEVBQUtiLE9BQ0xhLEVBQUtOLFNBQ0w4QixLQUVKLElBQUFTLFlBQVUsS0FDREwsRUFBUzdDLFVBQ2RnRCxJQUNBSyxXQUFXUCxNQUNaLENBQ0NULEtBRUosSUFBQWEsWUFBVSxLQUNOSixJQUNPLElBQUlFLE1BRVosSUFDa0Isa0JBQW9CLFNBQVU1QixPQUFPQyxPQUFPLENBQzdEdkIsSUFBSzZDLEVBQ0xZLEtBQU0sTUFDTnJCLE9BQVFBLEVBQ1JDLE1BQU9BLEdBQ1JPLEdBQVFGLEdBRWYsTUFBTU8sR0FBc0IsSUFBQVMsWUFBV3hCLEdBRXZDLFNBQVN5QixFQUFpQnBCLEVBQU1xQixHQUU1QixPQURBLEVBQUFYLE1BQUEsU0FBaUJXLElBQ0ksSUFBQUYsYUFBVyxDQUFDZCxFQUFPNUMsSUFBb0Isa0JBQW9CaUQsRUFBTzNCLE9BQU9DLE9BQU8sR0FBSXFCLEVBQU8sQ0FDeEc1QyxJQUFLQSxFQUNMdUMsS0FBTUEsT0FJbEIsTUFBTXNCLEVBQXVCRixFQUFpQixPQUFRLEVBQUFHLGdCQUNoREMsRUFBc0JKLEVBQWlCLE1BQU8sRUFBQUssZUFDOUNDLEVBQXdCTixFQUFpQixRQUFTLEVBQUFPLGlCQUNsREMsRUFBMkJSLEVBQWlCLFdBQVksRUFBQVMsb0JBQ3hEQyxFQUE0QlYsRUFBaUIsWUFBYSxFQUFBVyxxQkFDMURDLEVBQXlCWixFQUFpQixTQUFVLEVBQUFhLGtCQUNwREMsRUFBc0JkLEVBQWlCLE1BQU8sRUFBQWUsZUFDOUNDLEVBQTBCaEIsRUFBaUIsVUFBVyxFQUFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1jaGFydGpzLTIvZGlzdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGFydCBhcyBDaGFydCQxLCBMaW5lQ29udHJvbGxlciwgQmFyQ29udHJvbGxlciwgUmFkYXJDb250cm9sbGVyLCBEb3VnaG51dENvbnRyb2xsZXIsIFBvbGFyQXJlYUNvbnRyb2xsZXIsIEJ1YmJsZUNvbnRyb2xsZXIsIFBpZUNvbnRyb2xsZXIsIFNjYXR0ZXJDb250cm9sbGVyIH0gZnJvbSAnY2hhcnQuanMnO1xuXG5jb25zdCBkZWZhdWx0RGF0YXNldElkS2V5ID0gJ2xhYmVsJztcbmZ1bmN0aW9uIHJlZm9yd2FyZFJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldE9wdGlvbnMoY2hhcnQsIG5leHRPcHRpb25zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGFydC5vcHRpb25zLCBuZXh0T3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzZXRMYWJlbHMoY3VycmVudERhdGEsIG5leHRMYWJlbHMpIHtcbiAgICBjdXJyZW50RGF0YS5sYWJlbHMgPSBuZXh0TGFiZWxzO1xufVxuZnVuY3Rpb24gc2V0RGF0YXNldHMoY3VycmVudERhdGEsIG5leHREYXRhc2V0cykge1xuICAgIGxldCBkYXRhc2V0SWRLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IGRlZmF1bHREYXRhc2V0SWRLZXk7XG4gICAgY29uc3QgYWRkZWREYXRhc2V0cyA9IFtdO1xuICAgIGN1cnJlbnREYXRhLmRhdGFzZXRzID0gbmV4dERhdGFzZXRzLm1hcCgobmV4dERhdGFzZXQpPT57XG4gICAgICAgIC8vIGdpdmVuIHRoZSBuZXcgc2V0LCBmaW5kIGl0J3MgY3VycmVudCBtYXRjaFxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YXNldCA9IGN1cnJlbnREYXRhLmRhdGFzZXRzLmZpbmQoKGRhdGFzZXQpPT5kYXRhc2V0W2RhdGFzZXRJZEtleV0gPT09IG5leHREYXRhc2V0W2RhdGFzZXRJZEtleV1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gb3JpZ2luYWwgdG8gdXBkYXRlLCBzbyBzaW1wbHkgYWRkIG5ldyBvbmVcbiAgICAgICAgaWYgKCFjdXJyZW50RGF0YXNldCB8fCAhbmV4dERhdGFzZXQuZGF0YSB8fCBhZGRlZERhdGFzZXRzLmluY2x1ZGVzKGN1cnJlbnREYXRhc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5uZXh0RGF0YXNldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhZGRlZERhdGFzZXRzLnB1c2goY3VycmVudERhdGFzZXQpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnREYXRhc2V0LCBuZXh0RGF0YXNldCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGF0YXNldDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNsb25lRGF0YShkYXRhKSB7XG4gICAgbGV0IGRhdGFzZXRJZEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZGVmYXVsdERhdGFzZXRJZEtleTtcbiAgICBjb25zdCBuZXh0RGF0YSA9IHtcbiAgICAgICAgbGFiZWxzOiBbXSxcbiAgICAgICAgZGF0YXNldHM6IFtdXG4gICAgfTtcbiAgICBzZXRMYWJlbHMobmV4dERhdGEsIGRhdGEubGFiZWxzKTtcbiAgICBzZXREYXRhc2V0cyhuZXh0RGF0YSwgZGF0YS5kYXRhc2V0cywgZGF0YXNldElkS2V5KTtcbiAgICByZXR1cm4gbmV4dERhdGE7XG59XG4vKipcbiAqIEdldCBkYXRhc2V0IGZyb20gbW91c2UgY2xpY2sgZXZlbnRcbiAqIEBwYXJhbSBjaGFydCAtIENoYXJ0LmpzIGluc3RhbmNlXG4gKiBAcGFyYW0gZXZlbnQgLSBNb3VzZSBjbGljayBldmVudFxuICogQHJldHVybnMgRGF0YXNldFxuICovIGZ1bmN0aW9uIGdldERhdGFzZXRBdEV2ZW50KGNoYXJ0LCBldmVudCkge1xuICAgIHJldHVybiBjaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGV2ZW50Lm5hdGl2ZUV2ZW50LCAnZGF0YXNldCcsIHtcbiAgICAgICAgaW50ZXJzZWN0OiB0cnVlXG4gICAgfSwgZmFsc2UpO1xufVxuLyoqXG4gKiBHZXQgc2luZ2xlIGRhdGFzZXQgZWxlbWVudCBmcm9tIG1vdXNlIGNsaWNrIGV2ZW50XG4gKiBAcGFyYW0gY2hhcnQgLSBDaGFydC5qcyBpbnN0YW5jZVxuICogQHBhcmFtIGV2ZW50IC0gTW91c2UgY2xpY2sgZXZlbnRcbiAqIEByZXR1cm5zIERhdGFzZXRcbiAqLyBmdW5jdGlvbiBnZXRFbGVtZW50QXRFdmVudChjaGFydCwgZXZlbnQpIHtcbiAgICByZXR1cm4gY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShldmVudC5uYXRpdmVFdmVudCwgJ25lYXJlc3QnLCB7XG4gICAgICAgIGludGVyc2VjdDogdHJ1ZVxuICAgIH0sIGZhbHNlKTtcbn1cbi8qKlxuICogR2V0IGFsbCBkYXRhc2V0IGVsZW1lbnRzIGZyb20gbW91c2UgY2xpY2sgZXZlbnRcbiAqIEBwYXJhbSBjaGFydCAtIENoYXJ0LmpzIGluc3RhbmNlXG4gKiBAcGFyYW0gZXZlbnQgLSBNb3VzZSBjbGljayBldmVudFxuICogQHJldHVybnMgRGF0YXNldFxuICovIGZ1bmN0aW9uIGdldEVsZW1lbnRzQXRFdmVudChjaGFydCwgZXZlbnQpIHtcbiAgICByZXR1cm4gY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShldmVudC5uYXRpdmVFdmVudCwgJ2luZGV4Jywge1xuICAgICAgICBpbnRlcnNlY3Q6IHRydWVcbiAgICB9LCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIENoYXJ0Q29tcG9uZW50KHBhcmFtLCByZWYpIHtcbiAgICBsZXQgeyBoZWlnaHQgPTE1MCAsIHdpZHRoID0zMDAgLCByZWRyYXcgPWZhbHNlICwgZGF0YXNldElkS2V5ICwgdHlwZSAsIGRhdGEgLCBvcHRpb25zICwgcGx1Z2lucyA9W10gLCBmYWxsYmFja0NvbnRlbnQgLCB1cGRhdGVNb2RlICwgLi4ucHJvcHMgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNhbnZhc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjaGFydFJlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHJlbmRlckNoYXJ0ID0gKCk9PntcbiAgICAgICAgaWYgKCFjYW52YXNSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBjaGFydFJlZi5jdXJyZW50ID0gbmV3IENoYXJ0JDEoY2FudmFzUmVmLmN1cnJlbnQsIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBkYXRhOiBjbG9uZURhdGEoZGF0YSwgZGF0YXNldElkS2V5KSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgJiYge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zXG4gICAgICAgIH0pO1xuICAgICAgICByZWZvcndhcmRSZWYocmVmLCBjaGFydFJlZi5jdXJyZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3lDaGFydCA9ICgpPT57XG4gICAgICAgIHJlZm9yd2FyZFJlZihyZWYsIG51bGwpO1xuICAgICAgICBpZiAoY2hhcnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2hhcnRSZWYuY3VycmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICBjaGFydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmICghcmVkcmF3ICYmIGNoYXJ0UmVmLmN1cnJlbnQgJiYgb3B0aW9ucykge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhjaGFydFJlZi5jdXJyZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgcmVkcmF3LFxuICAgICAgICBvcHRpb25zXG4gICAgXSk7XG4gICAgdXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmICghcmVkcmF3ICYmIGNoYXJ0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHNldExhYmVscyhjaGFydFJlZi5jdXJyZW50LmNvbmZpZy5kYXRhLCBkYXRhLmxhYmVscyk7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIHJlZHJhdyxcbiAgICAgICAgZGF0YS5sYWJlbHNcbiAgICBdKTtcbiAgICB1c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFyZWRyYXcgJiYgY2hhcnRSZWYuY3VycmVudCAmJiBkYXRhLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBzZXREYXRhc2V0cyhjaGFydFJlZi5jdXJyZW50LmNvbmZpZy5kYXRhLCBkYXRhLmRhdGFzZXRzLCBkYXRhc2V0SWRLZXkpO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICByZWRyYXcsXG4gICAgICAgIGRhdGEuZGF0YXNldHNcbiAgICBdKTtcbiAgICB1c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFjaGFydFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgIGlmIChyZWRyYXcpIHtcbiAgICAgICAgICAgIGRlc3Ryb3lDaGFydCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChyZW5kZXJDaGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFydFJlZi5jdXJyZW50LnVwZGF0ZSh1cGRhdGVNb2RlKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgcmVkcmF3LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBkYXRhLmxhYmVscyxcbiAgICAgICAgZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgdXBkYXRlTW9kZVxuICAgIF0pO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoIWNoYXJ0UmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgZGVzdHJveUNoYXJ0KCk7XG4gICAgICAgIHNldFRpbWVvdXQocmVuZGVyQ2hhcnQpO1xuICAgIH0sIFtcbiAgICAgICAgdHlwZVxuICAgIF0pO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICByZW5kZXJDaGFydCgpO1xuICAgICAgICByZXR1cm4gKCk9PmRlc3Ryb3lDaGFydCgpXG4gICAgICAgIDtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuKC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcmVmOiBjYW52YXNSZWYsXG4gICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICB9LCBwcm9wcyksIGZhbGxiYWNrQ29udGVudCkpO1xufVxuY29uc3QgQ2hhcnQgPSAvKiNfX1BVUkVfXyovIGZvcndhcmRSZWYoQ2hhcnRDb21wb25lbnQpO1xuXG5mdW5jdGlvbiBjcmVhdGVUeXBlZENoYXJ0KHR5cGUsIHJlZ2lzdGVyYWJsZXMpIHtcbiAgICBDaGFydCQxLnJlZ2lzdGVyKHJlZ2lzdGVyYWJsZXMpO1xuICAgIHJldHVybigvKiNfX1BVUkVfXyovIGZvcndhcmRSZWYoKHByb3BzLCByZWYpPT4vKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hhcnQsIE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfSkpXG4gICAgKSk7XG59XG5jb25zdCBMaW5lID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVR5cGVkQ2hhcnQoJ2xpbmUnLCBMaW5lQ29udHJvbGxlcik7XG5jb25zdCBCYXIgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgnYmFyJywgQmFyQ29udHJvbGxlcik7XG5jb25zdCBSYWRhciA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVUeXBlZENoYXJ0KCdyYWRhcicsIFJhZGFyQ29udHJvbGxlcik7XG5jb25zdCBEb3VnaG51dCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVUeXBlZENoYXJ0KCdkb3VnaG51dCcsIERvdWdobnV0Q29udHJvbGxlcik7XG5jb25zdCBQb2xhckFyZWEgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgncG9sYXJBcmVhJywgUG9sYXJBcmVhQ29udHJvbGxlcik7XG5jb25zdCBCdWJibGUgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgnYnViYmxlJywgQnViYmxlQ29udHJvbGxlcik7XG5jb25zdCBQaWUgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgncGllJywgUGllQ29udHJvbGxlcik7XG5jb25zdCBTY2F0dGVyID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVR5cGVkQ2hhcnQoJ3NjYXR0ZXInLCBTY2F0dGVyQ29udHJvbGxlcik7XG5cbmV4cG9ydCB7IEJhciwgQnViYmxlLCBDaGFydCwgRG91Z2hudXQsIExpbmUsIFBpZSwgUG9sYXJBcmVhLCBSYWRhciwgU2NhdHRlciwgZ2V0RGF0YXNldEF0RXZlbnQsIGdldEVsZW1lbnRBdEV2ZW50LCBnZXRFbGVtZW50c0F0RXZlbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIl0sIm5hbWVzIjpbImRlZmF1bHREYXRhc2V0SWRLZXkiLCJyZWZvcndhcmRSZWYiLCJyZWYiLCJ2YWx1ZSIsImN1cnJlbnQiLCJzZXRMYWJlbHMiLCJjdXJyZW50RGF0YSIsIm5leHRMYWJlbHMiLCJsYWJlbHMiLCJzZXREYXRhc2V0cyIsIm5leHREYXRhc2V0cyIsImRhdGFzZXRJZEtleSIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFkZGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIm1hcCIsIm5leHREYXRhc2V0IiwiY3VycmVudERhdGFzZXQiLCJmaW5kIiwiZGF0YXNldCIsImRhdGEiLCJpbmNsdWRlcyIsInB1c2giLCJPYmplY3QiLCJhc3NpZ24iLCJjbG9uZURhdGEiLCJuZXh0RGF0YSIsImdldERhdGFzZXRBdEV2ZW50IiwiY2hhcnQiLCJldmVudCIsImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCJuYXRpdmVFdmVudCIsImludGVyc2VjdCIsImdldEVsZW1lbnRBdEV2ZW50IiwiZ2V0RWxlbWVudHNBdEV2ZW50IiwiQ2hhcnRDb21wb25lbnQiLCJwYXJhbSIsImhlaWdodCIsIndpZHRoIiwicmVkcmF3IiwidHlwZSIsIm9wdGlvbnMiLCJwbHVnaW5zIiwiZmFsbGJhY2tDb250ZW50IiwidXBkYXRlTW9kZSIsInByb3BzIiwiY2FudmFzUmVmIiwidXNlUmVmIiwiY2hhcnRSZWYiLCJyZW5kZXJDaGFydCIsIkNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiZGVzdHJveSIsInVzZUVmZmVjdCIsIm5leHRPcHRpb25zIiwiY29uZmlnIiwic2V0VGltZW91dCIsInVwZGF0ZSIsInJvbGUiLCJmb3J3YXJkUmVmIiwiY3JlYXRlVHlwZWRDaGFydCIsInJlZ2lzdGVyYWJsZXMiLCJMaW5lIiwiTGluZUNvbnRyb2xsZXIiLCJCYXIiLCJCYXJDb250cm9sbGVyIiwiUmFkYXIiLCJSYWRhckNvbnRyb2xsZXIiLCJEb3VnaG51dCIsIkRvdWdobnV0Q29udHJvbGxlciIsIlBvbGFyQXJlYSIsIlBvbGFyQXJlYUNvbnRyb2xsZXIiLCJCdWJibGUiLCJCdWJibGVDb250cm9sbGVyIiwiUGllIiwiUGllQ29udHJvbGxlciIsIlNjYXR0ZXIiLCJTY2F0dGVyQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/387.js b/server-data/resources/[phone]/npwd_crypto/web/dist/387.js deleted file mode 100644 index cbfa6b791..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/387.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[387,208],{1642:(e,n,t)=>{n.__esModule=!0,n.NuiContext=void 0;var r=t(2950);n.NuiContext=r.createContext({removeHandler:function(){console.log("Failed to remove event. The context has not been initialized")},addHandler:function(){console.log("Failed to add event. The context has not been initialized")}})},6877:(e,n,t)=>{n.__esModule=!0,n.useNuiEvent=void 0;var r=t(2950),i=t(1642);n.useNuiEvent=function(e){var n,t=r.useContext(null!==(n=e.context)&&void 0!==n?n:i.NuiContext),o=r.useState(e.defaultValue),u=o[0],a=o[1];if(!t)throw new Error("useNuiEvent must be used inside the NuiProvider");if(!e.event)throw new Error("Cannot use NuiEvent on nothing.");return r.useEffect((function(){return t.addHandler(e.event,(function(n){a(n.data.payload),e.callback&&"function"==typeof e.callback&&e.callback(n.data.payload)})),function(){t.removeHandler(e.event)}}),[]),{data:u}}},4208:function(e,n,t){var r=this&&this.__createBinding||(Object.create?function(e,n,t,r){void 0===r&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return n[t]}})}:function(e,n,t,r){void 0===r&&(r=t),e[r]=n[t]}),i=this&&this.__exportStar||function(e,n){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(n,t)||r(n,e,t)};n.__esModule=!0,i(t(8841),n),i(t(1642),n),i(t(6877),n)},8841:function(e,n,t){var r=this&&this.__createBinding||(Object.create?function(e,n,t,r){void 0===r&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return n[t]}})}:function(e,n,t,r){void 0===r&&(r=t),e[r]=n[t]}),i=this&&this.__setModuleDefault||(Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&r(n,e,t);return i(n,e),n},u=this&&this.__spreadArray||function(e,n){for(var t=0,r=n.length,i=e.length;t0&&r.current[t].forEach((function(e){i("Running handler for",t),e(n)}))}else i("Returning! Event was invalid",n)};return a.useEffect((function(){return window.addEventListener("message",o),function(){return window.removeEventListener("message",o)}}),[]),a.default.createElement(t.Provider,{value:{addHandler:function(e,n){var t;i("Adding handler for event",e);var o=null!==(t=r.current[e])&&void 0!==t?t:[];i("Existing handlers",o),r.current[e]=u(u([],o),[n])},removeHandler:function(e){i("Removing handler for event",e),delete r.current[e]}}},e.children)}}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkFBaUIsVUFBV1AsR0FDNUIsV0FBYyxPQUFPTSxPQUFPRSxvQkFBb0IsVUFBV1IsTUFDbkUsSUFDSzdELEVBQWlCLFFBQUVzRSxjQUFjaEIsRUFBUWlCLFNBQVUsQ0FBRTlCLE1BQU8sQ0FBRXBDLFdBaENyRCxTQUFVYSxFQUFPZ0QsR0FDOUIsSUFBSXpELEVBQ0pnRCxFQUFNLDJCQUE0QnZDLEdBQ2xDLElBQUlzRCxFQUFzRCxRQUFsQy9ELEVBQUs4QyxFQUFTUyxRQUFROUMsVUFBMkIsSUFBUFQsRUFBZ0JBLEVBQUssR0FDdkZnRCxFQUFNLG9CQUFxQmUsR0FDM0JqQixFQUFTUyxRQUFROUMsR0FBUzJCLEVBQWNBLEVBQWMsR0FBSTJCLEdBQW1CLENBQUNOLEtBMkJZaEUsY0F6QjFFLFNBQVVnQixHQUMxQnVDLEVBQU0sNkJBQThCdkMsVUFDN0JxQyxFQUFTUyxRQUFROUMsTUF1Qm9HbUMsRUFBTW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZml2ZW0taG9va3MvZGlzdC9jb250ZXh0L051aUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZml2ZW0taG9va3MvZGlzdC9ob29rcy91c2VOdWlFdmVudC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1maXZlbS1ob29rcy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpdmVtLWhvb2tzL2Rpc3QvcHJvdmlkZXIvTnVpUHJvdmlkZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5OdWlDb250ZXh0ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG5leHBvcnRzLk51aUNvbnRleHQgPSByZWFjdF8xLmNyZWF0ZUNvbnRleHQoe1xuICAgIHJlbW92ZUhhbmRsZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byByZW1vdmUgZXZlbnQuIFRoZSBjb250ZXh0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgIH0sXG4gICAgYWRkSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGFkZCBldmVudC4gVGhlIGNvbnRleHQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgfVxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnVzZU51aUV2ZW50ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgTnVpQ29udGV4dF8xID0gcmVxdWlyZShcIi4uL2NvbnRleHQvTnVpQ29udGV4dFwiKTtcbmZ1bmN0aW9uIHVzZU51aUV2ZW50KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGNvbnRleHQgPSByZWFjdF8xLnVzZUNvbnRleHQoKF9hID0gb3B0aW9ucy5jb250ZXh0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOdWlDb250ZXh0XzEuTnVpQ29udGV4dCk7XG4gICAgdmFyIF9iID0gcmVhY3RfMS51c2VTdGF0ZShvcHRpb25zLmRlZmF1bHRWYWx1ZSksIGRhdGEgPSBfYlswXSwgc2V0RGF0YSA9IF9iWzFdO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZU51aUV2ZW50IG11c3QgYmUgdXNlZCBpbnNpZGUgdGhlIE51aVByb3ZpZGVyJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5ldmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgTnVpRXZlbnQgb24gbm90aGluZy4nKTtcbiAgICB9XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb250ZXh0LmFkZEhhbmRsZXIob3B0aW9ucy5ldmVudCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBzZXREYXRhKGV2ZW50LmRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYWxsYmFjayAmJiB0eXBlb2Ygb3B0aW9ucy5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2soZXZlbnQuZGF0YS5wYXlsb2FkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlbW92ZUhhbmRsZXIob3B0aW9ucy5ldmVudCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiB7IGRhdGE6IGRhdGEgfTtcbn1cbmV4cG9ydHMudXNlTnVpRXZlbnQgPSB1c2VOdWlFdmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3Byb3ZpZGVyL051aVByb3ZpZGVyXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9jb250ZXh0L051aUNvbnRleHRcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2hvb2tzL3VzZU51aUV2ZW50XCIpLCBleHBvcnRzKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcbiAgICByZXR1cm4gdG87XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuTnVpUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIE51aUNvbnRleHRfMSA9IHJlcXVpcmUoXCIuLi9jb250ZXh0L051aUNvbnRleHRcIik7XG52YXIgTnVpUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIENvbnRleHQgPSAoX2EgPSBwcm9wcy5jb250ZXh0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOdWlDb250ZXh0XzEuTnVpQ29udGV4dDtcbiAgICB2YXIgaGFuZGxlcnMgPSByZWFjdF8xLnVzZVJlZih7fSk7XG4gICAgdmFyIGRlYnVnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJvcHMuZGVidWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmRlYnVnKGFyZ3MpO1xuICAgIH07XG4gICAgdmFyIGFkZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBkZWJ1ZygnQWRkaW5nIGhhbmRsZXIgZm9yIGV2ZW50JywgZXZlbnQpO1xuICAgICAgICB2YXIgZXhpc3RpbmdIYW5kbGVycyA9IChfYSA9IGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgZGVidWcoJ0V4aXN0aW5nIGhhbmRsZXJzJywgZXhpc3RpbmdIYW5kbGVycyk7XG4gICAgICAgIGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBleGlzdGluZ0hhbmRsZXJzKSwgW2hhbmRsZXJdKTtcbiAgICB9O1xuICAgIHZhciByZW1vdmVIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGRlYnVnKCdSZW1vdmluZyBoYW5kbGVyIGZvciBldmVudCcsIGV2ZW50KTtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzLmN1cnJlbnRbZXZlbnRdO1xuICAgIH07XG4gICAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnSGFuZGxpbmcgZXZlbnQnLCBldmVudCk7XG4gICAgICAgIGlmIChwcm9wcy52YWxpZGF0ZUV2ZW50ICYmICFwcm9wcy52YWxpZGF0ZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgZGVidWcoJ1JldHVybmluZyEgRXZlbnQgd2FzIGludmFsaWQnLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSBldmVudC5kYXRhLnR5cGU7XG4gICAgICAgIGRlYnVnKCdDaGVja2luZyBpZiB3ZSBzaG91bGQgaGFuZGxlIGV2ZW50IC4uICcsIHR5cGUpO1xuICAgICAgICBpZiAoaGFuZGxlcnMuY3VycmVudCAmJlxuICAgICAgICAgICAgaGFuZGxlcnMuY3VycmVudFt0eXBlXSAmJlxuICAgICAgICAgICAgaGFuZGxlcnMuY3VycmVudFt0eXBlXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5jdXJyZW50W3R5cGVdLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZygnUnVubmluZyBoYW5kbGVyIGZvcicsIHR5cGUpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudEhhbmRsZXIpOyB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gKHJlYWN0XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBhZGRIYW5kbGVyOiBhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyOiByZW1vdmVIYW5kbGVyIH0gfSwgcHJvcHMuY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLk51aVByb3ZpZGVyID0gTnVpUHJvdmlkZXI7XG4iXSwibmFtZXMiOlsiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJOdWlDb250ZXh0IiwicmVhY3RfMSIsImNyZWF0ZUNvbnRleHQiLCJyZW1vdmVIYW5kbGVyIiwiY29uc29sZSIsImxvZyIsImFkZEhhbmRsZXIiLCJ1c2VOdWlFdmVudCIsIk51aUNvbnRleHRfMSIsIm9wdGlvbnMiLCJfYSIsImNvbnRleHQiLCJ1c2VDb250ZXh0IiwiX2IiLCJ1c2VTdGF0ZSIsImRlZmF1bHRWYWx1ZSIsImRhdGEiLCJzZXREYXRhIiwiRXJyb3IiLCJldmVudCIsInVzZUVmZmVjdCIsInBheWxvYWQiLCJjYWxsYmFjayIsIl9fY3JlYXRlQmluZGluZyIsInRoaXMiLCJPYmplY3QiLCJjcmVhdGUiLCJvIiwibSIsImsiLCJrMiIsInVuZGVmaW5lZCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9fZXhwb3J0U3RhciIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJ2IiwidmFsdWUiLCJfX2ltcG9ydFN0YXIiLCJtb2QiLCJyZXN1bHQiLCJfX3NwcmVhZEFycmF5IiwidG8iLCJmcm9tIiwiaSIsImlsIiwibGVuZ3RoIiwiaiIsIk51aVByb3ZpZGVyIiwicHJvcHMiLCJDb250ZXh0IiwiaGFuZGxlcnMiLCJ1c2VSZWYiLCJkZWJ1ZyIsImFyZ3MiLCJfaSIsImFyZ3VtZW50cyIsImV2ZW50SGFuZGxlciIsInZhbGlkYXRlRXZlbnQiLCJ0eXBlIiwiY3VycmVudCIsImZvckVhY2giLCJoYW5kbGVyIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiLCJleGlzdGluZ0hhbmRsZXJzIiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/458.js b/server-data/resources/[phone]/npwd_crypto/web/dist/458.js deleted file mode 100644 index 39cb01506..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/458.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[458],{6774:e=>{e.exports=function(e,t,r,n){var i=r?r.call(n,e,t):void 0;if(void 0!==i)return!!i;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),o=Object.keys(t);if(a.length!==o.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c{"use strict";r.r(t),r.d(t,{ServerStyleSheet:()=>$e,StyleSheetConsumer:()=>oe,StyleSheetContext:()=>ae,StyleSheetManager:()=>he,ThemeConsumer:()=>je,ThemeContext:()=>Ne,ThemeProvider:()=>Me,__PRIVATE__:()=>Ye,createGlobalStyle:()=>Be,css:()=>ke,default:()=>Ue,isStyledComponent:()=>k,keyframes:()=>Fe,useTheme:()=>We,version:()=>C,withTheme:()=>He});var n=r(9864),i=r(2950),a=r.n(i),o=r(6774),s=r.n(o);const c=function(e){function t(e,n,c,l,h){for(var f,p,g,m,S,k=0,w=0,C=0,x=0,I=0,T=0,j=g=f=0,z=0,D=0,G=0,L=0,B=c.length,F=B-1,$="",H="",W="",Y="";zf)&&(L=($=$.replace(" ",":")).length),0n&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*r&&0c.charCodeAt(8))break;case 115:o=o.replace(c,"-webkit-"+c)+";"+o;break;case 207:case 102:o=o.replace(c,"-webkit-"+(102n.charCodeAt(0)&&(n=n.trim()),n=[n],01?t-1:0),n=1;n0?" Args: "+r.join(", "):""))}var _=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,r=0;r=this.groupSizes.length){for(var r=this.groupSizes,n=r.length,i=n;e>=i;)(i<<=1)<0&&E(16,""+e);this.groupSizes=new Uint32Array(i),this.groupSizes.set(r),this.length=i;for(var a=n;a=this.length||0===this.groupSizes[e])return t;for(var r=this.groupSizes[e],n=this.indexOfGroup(e),i=n+r,a=n;a=T&&(T=t+1),R.set(e,t),O.set(t,e)},z="style["+w+'][data-styled-version="5.3.3"]',D=new RegExp("^"+w+'\\.g(\\d+)\\[id="([\\w\\d-]+)"\\].*?"([^"]*)'),G=function(e,t,r){for(var n,i=r.split(","),a=0,o=i.length;a=0;r--){var n=t[r];if(n&&1===n.nodeType&&n.hasAttribute(w))return n}}(r),a=void 0!==i?i.nextSibling:null;n.setAttribute(w,"active"),n.setAttribute("data-styled-version","5.3.3");var o=B();return o&&n.setAttribute("nonce",o),r.insertBefore(n,a),n},$=function(){function e(e){var t=this.element=F(e);t.appendChild(document.createTextNode("")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,r=0,n=t.length;r=0){var r=document.createTextNode(t),n=this.nodes[e];return this.element.insertBefore(r,n||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e0&&(l+=e+",")})),n+=""+s+c+'{content:"'+l+'"}/*!sc*/\n'}}}return n}(this)},e}(),V=/(a)(d)/gi,X=function(e){return String.fromCharCode(e+(e>25?39:97))};function Z(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=X(t%52)+r;return(X(t%52)+r).replace(V,"$1-$2")}var J=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},K=function(e){return J(5381,e)};function Q(e){for(var t=0;t>>0);if(!t.hasNameForId(n,o)){var s=r(a,"."+o,void 0,n);t.insertRules(n,o,s)}i.push(o),this.staticRulesId=o}else{for(var c=this.rules.length,l=J(this.baseHash,r.hash),u="",d=0;d>>0);if(!t.hasNameForId(n,g)){var m=r(u,"."+g,void 0,n);t.insertRules(n,g,m)}i.push(g)}}return i.join(" ")},e}(),re=/^\s*\/\/.*$/gm,ne=[":","[",".","#"];function ie(e){var t,r,n,i,a=void 0===e?b:e,o=a.options,s=void 0===o?b:o,l=a.plugins,u=void 0===l?y:l,d=new c(s),h=[],f=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(r,n,i,a,o,s,c,l,u,d){switch(r){case 1:if(0===u&&64===n.charCodeAt(0))return e(n+";"),"";break;case 2:if(0===l)return n+"/*|*/";break;case 3:switch(l){case 102:case 112:return e(i[0]+n),"";default:return n+(0===d?"/*|*/":"")}case-2:n.split("/*|*/}").forEach(t)}}}((function(e){h.push(e)})),p=function(e,n,a){return 0===n&&-1!==ne.indexOf(a[r.length])||a.match(i)?e:"."+t};function g(e,a,o,s){void 0===s&&(s="&");var c=e.replace(re,""),l=a&&o?o+" "+a+" { "+c+" }":c;return t=s,r=a,n=new RegExp("\\"+r+"\\b","g"),i=new RegExp("(\\"+r+"\\b){2,}"),d(o||!a?"":a,l)}return d.use([].concat(u,[function(e,t,i){2===e&&i.length&&i[0].lastIndexOf(r)>0&&(i[0]=i[0].replace(n,p))},f,function(e){if(-2===e){var t=h;return h=[],t}}])),g.hash=u.length?u.reduce((function(e,t){return t.name||E(15),J(e,t.name)}),5381).toString():"",g}var ae=a().createContext(),oe=ae.Consumer,se=a().createContext(),ce=(se.Consumer,new q),le=ie();function ue(){return(0,i.useContext)(ae)||ce}function de(){return(0,i.useContext)(se)||le}function he(e){var t=(0,i.useState)(e.stylisPlugins),r=t[0],n=t[1],o=ue(),c=(0,i.useMemo)((function(){var t=o;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),l=(0,i.useMemo)((function(){return ie({options:{prefix:!e.disableVendorPrefixes},plugins:r})}),[e.disableVendorPrefixes,r]);return(0,i.useEffect)((function(){s()(r,e.stylisPlugins)||n(e.stylisPlugins)}),[e.stylisPlugins]),a().createElement(ae.Provider,{value:c},a().createElement(se.Provider,{value:l},e.children))}var fe=function(){function e(e,t){var r=this;this.inject=function(e,t){void 0===t&&(t=le);var n=r.name+t.hash;e.hasNameForId(r.id,n)||e.insertRules(r.id,n,t(r.rules,n,"@keyframes"))},this.toString=function(){return E(12,String(r.name))},this.name=e,this.id="sc-keyframes-"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=le),this.name+e.hash},e}(),pe=/([A-Z])/,ge=/([A-Z])/g,me=/^ms-/,ve=function(e){return"-"+e.toLowerCase()};function ye(e){return pe.test(e)?e.replace(ge,ve).replace(me,"-ms-"):e}var be=function(e){return null==e||!1===e||""===e};function Se(e,t,r,n){if(Array.isArray(e)){for(var i,a=[],o=0,s=e.length;o1?t-1:0),n=1;n?@[\\\]^`{|}~-]+/g,xe=/(^-|-$)/g;function Ie(e){return e.replace(Ce,"-").replace(xe,"")}var Pe=function(e){return Z(K(e)>>>0)};function Ee(e){return"string"==typeof e&&!0}var _e=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},Re=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function Oe(e,t,r){var n=e[r];_e(t)&&_e(n)?Te(n,t):e[r]=t}function Te(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=0||(i[r]=e[r]);return i}(t,["componentId"]),a=n&&n+"-"+(Ee(e)?e:Ie(A(e)));return De(e,g({},i,{attrs:v,componentId:a}),r)},Object.defineProperty(C,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=n?Te({},e.defaultProps,t):t}}),C.toString=function(){return"."+C.styledComponentId},o&&p()(C,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),C}var Ge=function(e){return function e(t,r,i){if(void 0===i&&(i=b),!(0,n.isValidElementType)(r))return E(1,String(r));var a=function(){return t(r,i,ke.apply(void 0,arguments))};return a.withConfig=function(n){return e(t,r,g({},i,{},n))},a.attrs=function(n){return e(t,r,g({},i,{attrs:Array.prototype.concat(i.attrs,n).filter(Boolean)}))},a}(De,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","textPath","tspan"].forEach((function(e){Ge[e]=Ge(e)}));var Le=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Q(e),q.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,r,n){var i=n(Se(this.rules,t,r,n).join(""),""),a=this.componentId+e;r.insertRules(a,a,i)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,r,n){e>2&&q.registerId(this.componentId+e),this.removeStyles(e,r),this.createStyles(e,t,r,n)},e}();function Be(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n"+t+""},this.getStyleTags=function(){return e.sealed?E(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return E(2);var r=((t={})[w]="",t["data-styled-version"]="5.3.3",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),n=B();return n&&(r.nonce=n),[a().createElement("style",g({},r,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new q({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?E(2):a().createElement(he,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return E(3)},e}(),He=function(e){var t=a().forwardRef((function(t,r){var n=(0,i.useContext)(Ne),o=e.defaultProps,s=we(t,n,o);return a().createElement(e,g({},t,{theme:s,ref:r}))}));return p()(t,e),t.displayName="WithTheme("+A(e)+")",t},We=function(){return(0,i.useContext)(Ne)},Ye={StyleSheet:q,masterSheet:ce};const Ue=Ge}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU4LmpzIiwibWFwcGluZ3MiOiJzRkFFQUEsRUFBT0MsUUFBVSxTQUFzQkMsRUFBTUMsRUFBTUMsRUFBU0MsR0FDMUQsSUFBSUMsRUFBTUYsRUFBVUEsRUFBUUcsS0FBS0YsRUFBZ0JILEVBQU1DLFFBQVEsRUFFL0QsUUFBWSxJQUFSRyxFQUNGLFFBQVNBLEVBR1gsR0FBSUosSUFBU0MsRUFDWCxPQUFPLEVBR1QsR0FBb0IsaUJBQVRELElBQXNCQSxHQUF3QixpQkFBVEMsSUFBc0JBLEVBQ3BFLE9BQU8sRUFHVCxJQUFJSyxFQUFRQyxPQUFPQyxLQUFLUixHQUNwQlMsRUFBUUYsT0FBT0MsS0FBS1AsR0FFeEIsR0FBSUssRUFBTUksU0FBV0QsRUFBTUMsT0FDekIsT0FBTyxFQU1ULElBSEEsSUFBSUMsRUFBa0JKLE9BQU9LLFVBQVVDLGVBQWVDLEtBQUtiLEdBR2xEYyxFQUFNLEVBQUdBLEVBQU1ULEVBQU1JLE9BQVFLLElBQU8sQ0FDM0MsSUFBSUMsRUFBTVYsRUFBTVMsR0FFaEIsSUFBS0osRUFBZ0JLLEdBQ25CLE9BQU8sRUFHVCxJQUFJQyxFQUFTakIsRUFBS2dCLEdBQ2RFLEVBQVNqQixFQUFLZSxHQUlsQixJQUFZLEtBRlpaLEVBQU1GLEVBQVVBLEVBQVFHLEtBQUtGLEVBQWdCYyxFQUFRQyxFQUFRRixRQUFPLFNBRXRDLElBQVJaLEdBQWtCYSxJQUFXQyxFQUNqRCxPQUFPLEVBSVgsT0FBTyxJLGdhQzBqQlQsUUF0bUJBLFNBQXFCQyxHQUNuQixTQUFTQyxFQUFFQyxFQUFHQyxFQUFHQyxFQUFHQyxFQUFHQyxHQUNyQixJQUFLLElBQWdDQyxFQUFHQyxFQUFpQkMsRUFBdUVDLEVBQW1DQyxFQUExSkMsRUFBSSxFQUFHQyxFQUFJLEVBQUdDLEVBQUksRUFBR0MsRUFBSSxFQUFTQyxFQUFJLEVBQUdDLEVBQUksRUFBTUMsRUFBSVQsRUFBSUYsRUFBSSxFQUFHWSxFQUFJLEVBQUdDLEVBQUksRUFBR0MsRUFBSSxFQUFHQyxFQUFJLEVBQUdDLEVBQUluQixFQUFFYixPQUFRaUMsRUFBSUQsRUFBSSxFQUFNRSxFQUFJLEdBQUlDLEVBQUksR0FBSUMsRUFBSSxHQUFJQyxFQUFJLEdBQU9ULEVBQUlJLEdBQUksQ0FJNUssR0FIQWYsRUFBSUosRUFBRXlCLFdBQVdWLEdBQ2pCQSxJQUFNSyxHQUFLLElBQU1YLEVBQUlFLEVBQUlELEVBQUlGLElBQU0sSUFBTUMsSUFBTUwsRUFBSSxLQUFPSyxFQUFJLEdBQUssSUFBS0UsRUFBSUQsRUFBSUYsRUFBSSxFQUFHVyxJQUFLQyxLQUV4RixJQUFNWCxFQUFJRSxFQUFJRCxFQUFJRixFQUFHLENBQ3ZCLEdBQUlPLElBQU1LLElBQU0sRUFBSUosSUFBTUssRUFBSUEsRUFBRUssUUFBUUMsRUFBRyxLQUFNLEVBQUlOLEVBQUVPLE9BQU96QyxRQUFTLENBQ3JFLE9BQVFpQixHQUNOLEtBQUssR0FDTCxLQUFLLEVBQ0wsS0FBSyxHQUNMLEtBQUssR0FDTCxLQUFLLEdBQ0gsTUFFRixRQUNFaUIsR0FBS3JCLEVBQUU2QixPQUFPZCxHQUdsQlgsRUFBSSxHQUdOLE9BQVFBLEdBQ04sS0FBSyxJQUtILElBSEFELEdBREFrQixFQUFJQSxFQUFFTyxRQUNBSCxXQUFXLEdBQ2pCcEIsRUFBSSxFQUVDYSxJQUFNSCxFQUFHQSxFQUFJSSxHQUFJLENBQ3BCLE9BQVFmLEVBQUlKLEVBQUV5QixXQUFXVixJQUN2QixLQUFLLElBQ0hWLElBQ0EsTUFFRixLQUFLLElBQ0hBLElBQ0EsTUFFRixLQUFLLEdBQ0gsT0FBUUQsRUFBSUosRUFBRXlCLFdBQVdWLEVBQUksSUFDM0IsS0FBSyxHQUNMLEtBQUssR0FDSGIsRUFBRyxDQUNELElBQUtZLEVBQUlDLEVBQUksRUFBR0QsRUFBSU0sSUFBS04sRUFDdkIsT0FBUWQsRUFBRXlCLFdBQVdYLElBQ25CLEtBQUssR0FDSCxHQUFJLEtBQU9WLEdBQUssS0FBT0osRUFBRXlCLFdBQVdYLEVBQUksSUFBTUMsRUFBSSxJQUFNRCxFQUFHLENBQ3pEQyxFQUFJRCxFQUFJLEVBQ1IsTUFBTVosRUFHUixNQUVGLEtBQUssR0FDSCxHQUFJLEtBQU9FLEVBQUcsQ0FDWlcsRUFBSUQsRUFBSSxFQUNSLE1BQU1aLEdBTWRhLEVBQUlELEdBS1YsTUFFRixLQUFLLEdBQ0hWLElBRUYsS0FBSyxHQUNIQSxJQUVGLEtBQUssR0FDTCxLQUFLLEdBQ0gsS0FBT1csSUFBTUssR0FBS3BCLEVBQUV5QixXQUFXVixLQUFPWCxLQUsxQyxHQUFJLElBQU1DLEVBQUcsTUFDYlUsSUFNRixHQUhBVixFQUFJTCxFQUFFOEIsVUFBVVosRUFBR0gsR0FDbkIsSUFBTVosSUFBTUEsR0FBS2tCLEVBQUlBLEVBQUVLLFFBQVFLLEVBQUksSUFBSUgsUUFBUUgsV0FBVyxJQUduRCxLQURDdEIsRUFDTixDQUlFLE9BSEEsRUFBSWEsSUFBTUssRUFBSUEsRUFBRUssUUFBUUMsRUFBRyxLQUMzQnZCLEVBQUlpQixFQUFFSSxXQUFXLElBR2YsS0FBSyxJQUNMLEtBQUssSUFDTCxLQUFLLElBQ0wsS0FBSyxHQUNIVCxFQUFJakIsRUFDSixNQUVGLFFBQ0VpQixFQUFJZ0IsRUFNUixHQUZBZCxHQURBYixFQUFJUixFQUFFRSxFQUFHaUIsRUFBR1gsRUFBR0QsRUFBR0YsRUFBSSxJQUNoQmYsT0FDTixFQUFJOEMsSUFBc0IxQixFQUFJMkIsRUFBRSxFQUFHN0IsRUFBekJXLEVBQUltQixFQUFFSCxFQUFHWCxFQUFHSixHQUFtQmxCLEVBQUdxQyxFQUFHQyxFQUFHbkIsRUFBR2QsRUFBR0YsRUFBR0QsR0FBSW9CLEVBQUlMLEVBQUVzQixLQUFLLFNBQUssSUFBVy9CLEdBQUssS0FBT1csR0FBS2IsRUFBSUUsRUFBRXFCLFFBQVF6QyxVQUFZaUIsRUFBSSxFQUFHQyxFQUFJLEtBQzVJLEVBQUlhLEVBQUcsT0FBUWQsR0FDakIsS0FBSyxJQUNIaUIsRUFBSUEsRUFBRUssUUFBUWEsRUFBSUMsR0FFcEIsS0FBSyxJQUNMLEtBQUssSUFDTCxLQUFLLEdBQ0huQyxFQUFJZ0IsRUFBSSxJQUFNaEIsRUFBSSxJQUNsQixNQUVGLEtBQUssSUFFSEEsR0FEQWdCLEVBQUlBLEVBQUVLLFFBQVFlLEVBQUksVUFDVixJQUFNcEMsRUFBSSxJQUNsQkEsRUFBSSxJQUFNcUMsR0FBSyxJQUFNQSxHQUFLQyxFQUFFLElBQU10QyxFQUFHLEdBQUssWUFBY0EsRUFBSSxJQUFNQSxFQUFJLElBQU1BLEVBQzVFLE1BRUYsUUFDRUEsRUFBSWdCLEVBQUloQixFQUFHLE1BQVFKLElBQVdxQixHQUFLakIsRUFBVkEsRUFBYSxTQUNuQ0EsRUFBSSxRQUlYQSxFQUFJUixFQUFFRSxFQUFHb0MsRUFBRXBDLEVBQUdzQixFQUFHSixHQUFJWixFQUFHSixFQUFHQyxFQUFJLEdBR25DcUIsR0FBS2xCLEVBQ0xBLEVBQUlZLEVBQUlELEVBQUlGLEVBQUlYLEVBQUksRUFDcEJrQixFQUFJLEdBQ0pqQixFQUFJSixFQUFFeUIsYUFBYVYsR0FDbkIsTUFFRixLQUFLLElBQ0wsS0FBSyxHQUVILEdBQUksR0FBS0csR0FEVEcsR0FBSyxFQUFJTCxFQUFJSyxFQUFFSyxRQUFRQyxFQUFHLElBQU1OLEdBQUdPLFFBQ3BCekMsUUFBUyxPQUFRLElBQU0yQixJQUFNWCxFQUFJa0IsRUFBRUksV0FBVyxHQUFJLEtBQU90QixHQUFLLEdBQUtBLEdBQUssSUFBTUEsS0FBT2UsR0FBS0csRUFBSUEsRUFBRUssUUFBUSxJQUFLLE1BQU12QyxRQUFTLEVBQUk4QyxRQUFLLEtBQVkxQixFQUFJMkIsRUFBRSxFQUFHYixFQUFHdEIsRUFBR0QsRUFBR3NDLEVBQUdDLEVBQUdmLEVBQUVuQyxPQUFRYyxFQUFHQyxFQUFHRCxLQUFPLEtBQU9pQixHQUFLRyxFQUFJZCxFQUFFcUIsUUFBUXpDLFVBQVlrQyxFQUFJLFFBQWFsQixFQUFJa0IsRUFBRUksV0FBVyxHQUFJckIsRUFBSWlCLEVBQUVJLFdBQVcsR0FBSXRCLEdBQzlTLEtBQUssRUFDSCxNQUVGLEtBQUssR0FDSCxHQUFJLE1BQVFDLEdBQUssS0FBT0EsRUFBRyxDQUN6Qm9CLEdBQUtILEVBQUlyQixFQUFFNkIsT0FBT2QsR0FDbEIsTUFHSixRQUNFLEtBQU9NLEVBQUVJLFdBQVdQLEVBQUksS0FBT0ksR0FBS3NCLEVBQUV2QixFQUFHbEIsRUFBR0MsRUFBR2lCLEVBQUVJLFdBQVcsS0FFaEVSLEVBQUlELEVBQUlGLEVBQUlYLEVBQUksRUFDaEJrQixFQUFJLEdBQ0pqQixFQUFJSixFQUFFeUIsYUFBYVYsSUFJekIsT0FBUVgsR0FDTixLQUFLLEdBQ0wsS0FBSyxHQUNILEtBQU9LLEVBQUlBLEVBQUksRUFBSSxJQUFNLEVBQUlOLEdBQUssTUFBUUYsR0FBSyxFQUFJb0IsRUFBRWxDLFNBQVc2QixFQUFJLEVBQUdLLEdBQUssTUFDNUUsRUFBSVksRUFBSVksR0FBS1gsRUFBRSxFQUFHYixFQUFHdEIsRUFBR0QsRUFBR3NDLEVBQUdDLEVBQUdmLEVBQUVuQyxPQUFRYyxFQUFHQyxFQUFHRCxHQUNqRG9DLEVBQUksRUFDSkQsSUFDQSxNQUVGLEtBQUssR0FDTCxLQUFLLElBQ0gsR0FBSSxJQUFNM0IsRUFBSUUsRUFBSUQsRUFBSUYsRUFBRyxDQUN2QjZCLElBQ0EsTUFHSixRQUlFLE9BSEFBLElBQ0EvQixFQUFJTixFQUFFNkIsT0FBT2QsR0FFTFgsR0FDTixLQUFLLEVBQ0wsS0FBSyxHQUNILEdBQUksSUFBTU8sRUFBSUgsRUFBSUMsRUFBRyxPQUFRRyxHQUMzQixLQUFLLEdBQ0wsS0FBSyxHQUNMLEtBQUssRUFDTCxLQUFLLEdBQ0hOLEVBQUksR0FDSixNQUVGLFFBQ0UsS0FBT0YsSUFBTUUsRUFBSSxLQUVyQixNQUVGLEtBQUssRUFDSEEsRUFBSSxNQUNKLE1BRUYsS0FBSyxHQUNIQSxFQUFJLE1BQ0osTUFFRixLQUFLLEdBQ0hBLEVBQUksTUFDSixNQUVGLEtBQUssR0FDSCxJQUFNSyxFQUFJRixFQUFJRCxJQUFNUSxFQUFJQyxFQUFJLEVBQUdYLEVBQUksS0FBT0EsR0FDMUMsTUFFRixLQUFLLElBQ0gsR0FBSSxJQUFNSyxFQUFJRixFQUFJRCxFQUFJc0MsR0FBSyxFQUFJaEMsRUFBRyxPQUFRQyxFQUFJRCxHQUM1QyxLQUFLLEVBQ0gsTUFBUUYsR0FBSyxLQUFPWixFQUFFeUIsV0FBV1YsRUFBSSxLQUFPK0IsRUFBSWxDLEdBRWxELEtBQUssRUFDSCxNQUFRQyxJQUFNaUMsRUFBSWpDLEdBRXRCLE1BRUYsS0FBSyxHQUNILElBQU1GLEVBQUlGLEVBQUlELElBQU1NLEVBQUlDLEdBQ3hCLE1BRUYsS0FBSyxHQUNILElBQU1OLEVBQUlDLEVBQUlDLEVBQUlILElBQU1RLEVBQUksRUFBR1YsR0FBSyxNQUNwQyxNQUVGLEtBQUssR0FDTCxLQUFLLEdBQ0gsSUFBTUcsSUFBTUUsRUFBSUEsSUFBTVAsRUFBSSxFQUFJLElBQU1PLEVBQUlQLEVBQUlPLEdBQzVDLE1BRUYsS0FBSyxHQUNILElBQU1BLEVBQUlGLEVBQUlDLEdBQUtGLElBQ25CLE1BRUYsS0FBSyxHQUNILElBQU1HLEVBQUlGLEVBQUlDLEdBQUtGLElBQ25CLE1BRUYsS0FBSyxHQUNILElBQU1HLEVBQUlGLEVBQUlELEdBQUtFLElBQ25CLE1BRUYsS0FBSyxHQUNDLElBQU1DLEVBQUlGLEVBQUlELElBQ1osSUFBTUwsSUFBVyxFQUFJUyxFQUFJLEVBQUlDLEdBQzFCLE1BSUhWLEVBQUksSUFFUk8sS0FHRixNQUVGLEtBQUssR0FDSCxJQUFNRCxFQUFJQyxFQUFJQyxFQUFJSCxFQUFJTSxFQUFJVCxJQUFNQSxFQUFJLEdBQ3BDLE1BRUYsS0FBSyxHQUNMLEtBQUssR0FDSCxLQUFNLEVBQUlNLEVBQUlILEVBQUlFLEdBQUksT0FBUUQsR0FDNUIsS0FBSyxFQUNILE9BQVEsRUFBSUwsRUFBSSxFQUFJSixFQUFFeUIsV0FBV1YsRUFBSSxJQUNuQyxLQUFLLElBQ0hOLEVBQUksR0FDSixNQUVGLEtBQUssSUFDSFMsRUFBSUgsRUFBR04sRUFBSSxHQUdmLE1BRUYsS0FBSyxHQUNILEtBQU9MLEdBQUssS0FBT1EsR0FBS00sRUFBSSxJQUFNSCxJQUFNLEtBQU9mLEVBQUV5QixXQUFXUCxFQUFJLEtBQU9JLEdBQUt0QixFQUFFOEIsVUFBVVosRUFBR0gsRUFBSSxJQUFLVCxFQUFJLEdBQUlHLEVBQUksSUFJeEgsSUFBTUEsSUFBTVksR0FBS2YsR0FHckJPLEVBQUlELEVBQ0pBLEVBQUlSLEVBQ0pXLElBS0YsR0FBSSxHQUZKRyxFQUFJSSxFQUFFbkMsUUFFSyxDQUVULEdBREE2QixFQUFJakIsRUFDQSxFQUFJa0MsUUFBMkMsS0FBckMxQixFQUFJMkIsRUFBRSxFQUFHWixFQUFHTixFQUFHbEIsRUFBR3NDLEVBQUdDLEVBQUduQixFQUFHakIsRUFBR0MsRUFBR0QsS0FBb0IsS0FBT3FCLEVBQUlmLEdBQUdwQixPQUFTLE9BQU9xQyxFQUFJRixFQUFJQyxFQUd6RyxHQUZBRCxFQUFJTixFQUFFc0IsS0FBSyxLQUFPLElBQU1oQixFQUFJLElBRXhCLEdBQU1vQixFQUFJSSxFQUFHLENBR2YsT0FGQSxJQUFNSixHQUFLQyxFQUFFckIsRUFBRyxLQUFPd0IsRUFBSSxHQUVuQkEsR0FDTixLQUFLLElBQ0h4QixFQUFJQSxFQUFFSSxRQUFRcUIsRUFBSSxZQUFjekIsRUFDaEMsTUFFRixLQUFLLElBQ0hBLEVBQUlBLEVBQUVJLFFBQVFzQixFQUFHLHNCQUF3QjFCLEVBQUVJLFFBQVFzQixFQUFHLGFBQWUxQixFQUFFSSxRQUFRc0IsRUFBRyxpQkFBbUIxQixFQUd6R3dCLEVBQUksR0FJUixPQUFPdEIsRUFBSUYsRUFBSUMsRUFHakIsU0FBU1ksRUFBRXJDLEVBQUdDLEVBQUdDLEdBQ2YsSUFBSUMsRUFBSUYsRUFBRTZCLE9BQU9xQixNQUFNQyxHQUN2Qm5ELEVBQUlFLEVBQ0osSUFBSUMsRUFBSUQsRUFBRWQsT0FDTnFCLEVBQUlWLEVBQUVYLE9BRVYsT0FBUXFCLEdBQ04sS0FBSyxFQUNMLEtBQUssRUFDSCxJQUFJQyxFQUFJLEVBRVIsSUFBS1gsRUFBSSxJQUFNVSxFQUFJLEdBQUtWLEVBQUUsR0FBSyxJQUFLVyxFQUFJUCxJQUFLTyxFQUMzQ1YsRUFBRVUsR0FBSzBDLEVBQUVyRCxFQUFHQyxFQUFFVSxHQUFJVCxHQUFHNEIsT0FHdkIsTUFFRixRQUNFLElBQUlsQixFQUFJRCxFQUFJLEVBRVosSUFBS1YsRUFBSSxHQUFJVSxFQUFJUCxJQUFLTyxFQUNwQixJQUFLLElBQUlFLEVBQUksRUFBR0EsRUFBSUgsSUFBS0csRUFDdkJaLEVBQUVXLEtBQU95QyxFQUFFckQsRUFBRWEsR0FBSyxJQUFLVixFQUFFUSxHQUFJVCxHQUFHNEIsT0FNeEMsT0FBTzdCLEVBR1QsU0FBU29ELEVBQUVyRCxFQUFHQyxFQUFHQyxHQUNmLElBQUlDLEVBQUlGLEVBQUUwQixXQUFXLEdBR3JCLE9BRkEsR0FBS3hCLElBQU1BLEdBQUtGLEVBQUlBLEVBQUU2QixRQUFRSCxXQUFXLElBRWpDeEIsR0FDTixLQUFLLEdBQ0gsT0FBT0YsRUFBRTJCLFFBQVFILEVBQUcsS0FBT3pCLEVBQUU4QixRQUUvQixLQUFLLEdBQ0gsT0FBTzlCLEVBQUU4QixPQUFTN0IsRUFBRTJCLFFBQVFILEVBQUcsS0FBT3pCLEVBQUU4QixRQUUxQyxRQUNFLEdBQUksRUFBSSxFQUFJNUIsR0FBSyxFQUFJRCxFQUFFcUQsUUFBUSxNQUFPLE9BQU9yRCxFQUFFMkIsUUFBUUgsR0FBSSxLQUFPekIsRUFBRTJCLFdBQVcsR0FBSyxHQUFLLE1BQVEzQixFQUFFOEIsUUFHdkcsT0FBTzlCLEVBQUlDLEVBR2IsU0FBUzZDLEVBQUU5QyxFQUFHQyxFQUFHQyxFQUFHQyxHQUNsQixJQUFJQyxFQUFJSixFQUFJLElBQ1JVLEVBQUksRUFBSVQsRUFBSSxFQUFJQyxFQUFJLEVBQUlDLEVBRTVCLEdBQUksTUFBUU8sRUFBRyxDQUNiVixFQUFJSSxFQUFFa0QsUUFBUSxJQUFLLEdBQUssRUFDeEIsSUFBSTNDLEVBQUlQLEVBQUU0QixVQUFVaEMsRUFBR0ksRUFBRWYsT0FBUyxHQUFHeUMsT0FFckMsT0FEQW5CLEVBQUlQLEVBQUU0QixVQUFVLEVBQUdoQyxHQUFHOEIsT0FBU25CLEVBQUksSUFDNUIsSUFBTWlDLEdBQUssSUFBTUEsR0FBS0MsRUFBRWxDLEVBQUcsR0FBSyxXQUFhQSxFQUFJQSxFQUFJQSxFQUc5RCxHQUFJLElBQU1pQyxHQUFLLElBQU1BLElBQU1DLEVBQUV6QyxFQUFHLEdBQUksT0FBT0EsRUFFM0MsT0FBUU0sR0FDTixLQUFLLEtBQ0gsT0FBTyxLQUFPTixFQUFFdUIsV0FBVyxJQUFNLFdBQWF2QixFQUFJQSxFQUFJQSxFQUV4RCxLQUFLLElBQ0gsT0FBTyxNQUFRQSxFQUFFdUIsV0FBVyxHQUFLLFdBQWF2QixFQUFJQSxFQUFJQSxFQUV4RCxLQUFLLElBQ0gsT0FBTyxNQUFRQSxFQUFFdUIsV0FBVyxHQUFLLFdBQWF2QixFQUFJQSxFQUFJQSxFQUV4RCxLQUFLLEtBQ0gsR0FBSSxNQUFRQSxFQUFFdUIsV0FBVyxHQUFJLE1BRS9CLEtBQUssSUFDTCxLQUFLLElBQ0gsTUFBTyxXQUFhdkIsRUFBSUEsRUFFMUIsS0FBSyxJQUNILE1BQU8sV0FBYUEsRUFBSSxRQUFVQSxFQUFJQSxFQUV4QyxLQUFLLEtBQ0wsS0FBSyxJQUNILE1BQU8sV0FBYUEsRUFBSSxRQUFVQSxFQUFJLE9BQVNBLEVBQUlBLEVBRXJELEtBQUssSUFDSCxHQUFJLEtBQU9BLEVBQUV1QixXQUFXLEdBQUksTUFBTyxXQUFhdkIsRUFBSUEsRUFDcEQsR0FBSSxFQUFJQSxFQUFFa0QsUUFBUSxhQUFjLElBQUssT0FBT2xELEVBQUV3QixRQUFRMkIsRUFBSSxnQkFBa0JuRCxFQUM1RSxNQUVGLEtBQUssSUFDSCxHQUFJLEtBQU9BLEVBQUV1QixXQUFXLEdBQUksT0FBUXZCLEVBQUV1QixXQUFXLElBQy9DLEtBQUssSUFDSCxNQUFPLGVBQWlCdkIsRUFBRXdCLFFBQVEsUUFBUyxJQUFNLFdBQWF4QixFQUFJLE9BQVNBLEVBQUV3QixRQUFRLE9BQVEsWUFBY3hCLEVBRTdHLEtBQUssSUFDSCxNQUFPLFdBQWFBLEVBQUksT0FBU0EsRUFBRXdCLFFBQVEsU0FBVSxZQUFjeEIsRUFFckUsS0FBSyxHQUNILE1BQU8sV0FBYUEsRUFBSSxPQUFTQSxFQUFFd0IsUUFBUSxRQUFTLGtCQUFvQnhCLEVBRTVFLE1BQU8sV0FBYUEsRUFBSSxPQUFTQSxFQUFJQSxFQUV2QyxLQUFLLElBQ0gsTUFBTyxXQUFhQSxFQUFJLFlBQWNBLEVBQUlBLEVBRTVDLEtBQUssS0FDSCxHQUFJLEtBQU9BLEVBQUV1QixXQUFXLEdBQUksTUFFNUIsTUFBTyxvQkFEUGhCLEVBQUlQLEVBQUU0QixVQUFVNUIsRUFBRWtELFFBQVEsSUFBSyxLQUFLMUIsUUFBUSxRQUFTLElBQUlBLFFBQVEsZ0JBQWlCLFlBQ2xELFdBQWF4QixFQUFJLGdCQUFrQk8sRUFBSVAsRUFFekUsS0FBSyxLQUNILE9BQU9vRCxFQUFHQyxLQUFLckQsR0FBS0EsRUFBRXdCLFFBQVE4QixFQUFJLGFBQWV0RCxFQUFFd0IsUUFBUThCLEVBQUksVUFBWXRELEVBQUlBLEVBRWpGLEtBQUssSUFJSCxPQUZBSCxHQURBVSxFQUFJUCxFQUFFNEIsVUFBVSxJQUFJRixRQUNkd0IsUUFBUSxLQUFPLEVBRWIzQyxFQUFFZ0IsV0FBVyxHQUFLaEIsRUFBRWdCLFdBQVcxQixJQUNyQyxLQUFLLElBQ0hVLEVBQUlQLEVBQUV3QixRQUFRRixFQUFHLE1BQ2pCLE1BRUYsS0FBSyxJQUNIZixFQUFJUCxFQUFFd0IsUUFBUUYsRUFBRyxTQUNqQixNQUVGLEtBQUssSUFDSGYsRUFBSVAsRUFBRXdCLFFBQVFGLEVBQUcsTUFDakIsTUFFRixRQUNFLE9BQU90QixFQUdYLE1BQU8sV0FBYUEsRUFBSSxPQUFTTyxFQUFJUCxFQUV2QyxLQUFLLEtBQ0gsSUFBSyxJQUFNQSxFQUFFa0QsUUFBUSxTQUFVLEdBQUksTUFFckMsS0FBSyxJQUlILE9BSEFyRCxHQUFLRyxFQUFJSixHQUFHWCxPQUFTLEdBR2JxQixHQUZSQyxHQUFLLEtBQU9QLEVBQUV1QixXQUFXMUIsR0FBS0csRUFBRTRCLFVBQVUsRUFBRy9CLEdBQUtHLEdBQUc0QixVQUFVaEMsRUFBRXNELFFBQVEsSUFBSyxHQUFLLEdBQUd4QixRQUV4RUgsV0FBVyxJQUF3QixFQUFsQmhCLEVBQUVnQixXQUFXLEtBQzFDLEtBQUssSUFDSCxHQUFJLElBQU1oQixFQUFFZ0IsV0FBVyxHQUFJLE1BRTdCLEtBQUssSUFDSHZCLEVBQUlBLEVBQUV3QixRQUFRakIsRUFBRyxXQUFhQSxHQUFLLElBQU1QLEVBQ3pDLE1BRUYsS0FBSyxJQUNMLEtBQUssSUFDSEEsRUFBSUEsRUFBRXdCLFFBQVFqQixFQUFHLFlBQWMsSUFBTUQsRUFBSSxVQUFZLElBQU0sT0FBUyxJQUFNTixFQUFFd0IsUUFBUWpCLEVBQUcsV0FBYUEsR0FBSyxJQUFNUCxFQUFFd0IsUUFBUWpCLEVBQUcsT0FBU0EsRUFBSSxPQUFTLElBQU1QLEVBRzVKLE9BQU9BLEVBQUksSUFFYixLQUFLLElBQ0gsR0FBSSxLQUFPQSxFQUFFdUIsV0FBVyxHQUFJLE9BQVF2QixFQUFFdUIsV0FBVyxJQUMvQyxLQUFLLElBQ0gsT0FBT2hCLEVBQUlQLEVBQUV3QixRQUFRLFNBQVUsSUFBSyxXQUFheEIsRUFBSSxlQUFpQk8sRUFBSSxZQUFjQSxFQUFJUCxFQUU5RixLQUFLLElBQ0gsTUFBTyxXQUFhQSxFQUFJLGlCQUFtQkEsRUFBRXdCLFFBQVErQixFQUFJLElBQU12RCxFQUVqRSxRQUNFLE1BQU8sV0FBYUEsRUFBSSxxQkFBdUJBLEVBQUV3QixRQUFRLGdCQUFpQixJQUFJQSxRQUFRK0IsRUFBSSxJQUFNdkQsRUFFcEcsTUFFRixLQUFLLElBQ0wsS0FBSyxJQUNILEdBQUksS0FBT0EsRUFBRXVCLFdBQVcsSUFBTSxNQUFRdkIsRUFBRXVCLFdBQVcsR0FBSSxNQUV6RCxLQUFLLElBQ0wsS0FBSyxJQUNILElBQUksSUFBT2lDLEVBQUdILEtBQUt6RCxHQUFJLE9BQU8sT0FBU1csRUFBSVgsRUFBRWdDLFVBQVVoQyxFQUFFc0QsUUFBUSxLQUFPLElBQUkzQixXQUFXLEdBQUttQixFQUFFOUMsRUFBRTRCLFFBQVEsVUFBVyxrQkFBbUIzQixFQUFHQyxFQUFHQyxHQUFHeUIsUUFBUSxrQkFBbUIsWUFBY3hCLEVBQUV3QixRQUFRakIsRUFBRyxXQUFhQSxHQUFLUCxFQUFFd0IsUUFBUWpCLEVBQUcsUUFBVUEsRUFBRWlCLFFBQVEsUUFBUyxLQUFPeEIsRUFDeFEsTUFFRixLQUFLLElBQ0gsR0FBSUEsRUFBSSxXQUFhQSxHQUFLLE1BQVFBLEVBQUV1QixXQUFXLEdBQUssT0FBU3ZCLEVBQUksSUFBTUEsRUFBRyxNQUFRRixFQUFJQyxHQUFLLE1BQVFDLEVBQUV1QixXQUFXLEtBQU8sRUFBSXZCLEVBQUVrRCxRQUFRLFlBQWEsSUFBSyxPQUFPbEQsRUFBRTRCLFVBQVUsRUFBRzVCLEVBQUVrRCxRQUFRLElBQUssSUFBTSxHQUFHMUIsUUFBUWlDLEVBQUksZ0JBQWtCekQsRUFHdk8sT0FBT0EsRUFHVCxTQUFTeUMsRUFBRTdDLEVBQUdDLEdBQ1osSUFBSUMsRUFBSUYsRUFBRXNELFFBQVEsSUFBTXJELEVBQUksSUFBTSxLQUM5QkUsRUFBSUgsRUFBRWdDLFVBQVUsRUFBRyxJQUFNL0IsRUFBSUMsRUFBSSxJQUVyQyxPQURBQSxFQUFJRixFQUFFZ0MsVUFBVTlCLEVBQUksRUFBR0YsRUFBRVgsT0FBUyxHQUMzQnlFLEVBQUUsSUFBTTdELEVBQUlFLEVBQUlBLEVBQUV5QixRQUFRbUMsRUFBSSxNQUFPN0QsRUFBR0QsR0FHakQsU0FBU3lDLEVBQUcxQyxFQUFHQyxHQUNiLElBQUlDLEVBQUk0QyxFQUFFN0MsRUFBR0EsRUFBRTBCLFdBQVcsR0FBSTFCLEVBQUUwQixXQUFXLEdBQUkxQixFQUFFMEIsV0FBVyxJQUM1RCxPQUFPekIsSUFBTUQsRUFBSSxJQUFNQyxFQUFFMEIsUUFBUW9DLEVBQUksWUFBWWhDLFVBQVUsR0FBSyxJQUFNL0IsRUFBSSxJQUc1RSxTQUFTbUMsRUFBRXBDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdNLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdSLEdBQ3BDLElBQUssSUFBa0J1QyxFQUFkdEMsRUFBSSxFQUFHUSxFQUFJYixFQUFNSyxFQUFJNkIsSUFBSzdCLEVBQ2pDLE9BQVFzQyxFQUFJcUIsRUFBRTNELEdBQUd0QixLQUFLcUMsRUFBR3JCLEVBQUdjLEVBQUdaLEVBQUdDLEVBQUdDLEVBQUdNLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdSLElBQ2xELFVBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLEtBQUssS0FDSCxNQUVGLFFBQ0VTLEVBQUk4QixFQUlWLEdBQUk5QixJQUFNYixFQUFHLE9BQU9hLEVBbUJ0QixTQUFTb0QsRUFBRWxFLEdBR1QsWUFEQSxLQURBQSxFQUFJQSxFQUFFbUUsVUFDV0wsRUFBSSxLQUFNOUQsRUFBSSxtQkFBc0JBLEVBQUk0QyxFQUFJLEdBQUtBLEVBQUksRUFBR2tCLEVBQUk5RCxHQUFLNEMsRUFBSSxHQUMvRXNCLEVBR1QsU0FBUzdDLEVBQUVyQixFQUFHQyxHQUNaLElBQUlDLEVBQUlGLEVBS1IsR0FKQSxHQUFLRSxFQUFFeUIsV0FBVyxLQUFPekIsRUFBSUEsRUFBRTRCLFFBRS9CNUIsRUFBSSxDQURBQSxHQUdBLEVBQUlpQyxFQUFHLENBQ1QsSUFBSWhDLEVBQUlpQyxHQUFHLEVBQUduQyxFQUFHQyxFQUFHQSxFQUFHb0MsRUFBR0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxRQUN0QyxJQUFXcEMsR0FBSyxpQkFBb0JBLElBQU1GLEVBQUlFLEdBR2hELElBQUlDLEVBQUlMLEVBQUVtQyxFQUFHaEMsRUFBR0QsRUFBRyxFQUFHLEdBS3RCLE9BSkEsRUFBSWtDLFFBQW1ELEtBQTdDaEMsRUFBSWlDLEdBQUcsRUFBR2hDLEVBQUdGLEVBQUdBLEVBQUdvQyxFQUFHQyxFQUFHbkMsRUFBRWYsT0FBUSxFQUFHLEVBQUcsTUFBcUJlLEVBQUlELEdBRTVFNkMsRUFBSSxFQUNKVCxFQUFJRCxFQUFJLEVBQ0RsQyxFQUdULElBQUk2QixFQUFLLFFBQ0xKLEVBQUksWUFDSjZCLEVBQUssT0FDTEYsRUFBSyxVQUNMSyxFQUFLLHNCQUNMVCxFQUFLLFNBQ0wzQixFQUFJLG9CQUNKa0IsRUFBSyxxQkFDTE8sRUFBSSxhQUNKRCxFQUFLLGdCQUNMdkIsRUFBSSxxQkFDSmUsRUFBSyxrQkFDTHVCLEVBQUssZUFDTEwsRUFBSyxlQUNMSSxFQUFLLDhCQUNMSCxFQUFLLG1DQUNMTCxFQUFLLHNCQUNMaEIsRUFBSSxFQUNKRCxFQUFJLEVBQ0pVLEVBQUksRUFDSkosRUFBSSxFQUNKVixFQUFJLEdBQ0orQixFQUFJLEdBQ0o5QixFQUFJLEVBQ0oyQixFQUFJLEtBQ0pmLEVBQUksRUFLUixPQUhBMUIsRUFBRStDLElBcEVGLFNBQVNDLEVBQUVyRSxHQUNULE9BQVFBLEdBQ04sVUFBSyxFQUNMLEtBQUssS0FDSG1DLEVBQUk4QixFQUFFNUUsT0FBUyxFQUNmLE1BRUYsUUFDRSxHQUFJLG1CQUFzQlcsRUFBR2lFLEVBQUU5QixLQUFPbkMsT0FBTyxHQUFJLGlCQUFvQkEsRUFBRyxJQUFLLElBQUlDLEVBQUksRUFBR0MsRUFBSUYsRUFBRVgsT0FBUVksRUFBSUMsSUFBS0QsRUFDN0dvRSxFQUFFckUsRUFBRUMsU0FDQzhDLEVBQVUsSUFBSi9DLEVBR2pCLE9BQU9xRSxHQXdEVGhELEVBQUVpRCxJQUFNSixPQUNSLElBQVdwRSxHQUFLb0UsRUFBRXBFLEdBQ1h1QixHQ2xqQlQsRUFqRG1CLENBQ2pCa0Qsd0JBQXlCLEVBQ3pCQyxrQkFBbUIsRUFDbkJDLGlCQUFrQixFQUNsQkMsaUJBQWtCLEVBQ2xCQyxRQUFTLEVBQ1RDLGFBQWMsRUFDZEMsZ0JBQWlCLEVBQ2pCQyxZQUFhLEVBQ2JDLFFBQVMsRUFDVEMsS0FBTSxFQUNOQyxTQUFVLEVBQ1ZDLGFBQWMsRUFDZEMsV0FBWSxFQUNaQyxhQUFjLEVBQ2RDLFVBQVcsRUFDWEMsUUFBUyxFQUNUQyxXQUFZLEVBQ1pDLFlBQWEsRUFDYkMsYUFBYyxFQUNkQyxXQUFZLEVBQ1pDLGNBQWUsRUFDZkMsZUFBZ0IsRUFDaEJDLGdCQUFpQixFQUNqQkMsVUFBVyxFQUNYQyxjQUFlLEVBQ2ZDLGFBQWMsRUFDZEMsaUJBQWtCLEVBQ2xCQyxXQUFZLEVBQ1pDLFdBQVksRUFDWkMsUUFBUyxFQUNUQyxNQUFPLEVBQ1BDLFFBQVMsRUFDVEMsUUFBUyxFQUNUQyxPQUFRLEVBQ1JDLE9BQVEsRUFDUkMsS0FBTSxFQUNOQyxnQkFBaUIsRUFFakJDLFlBQWEsRUFDYkMsYUFBYyxFQUNkQyxZQUFhLEVBQ2JDLGdCQUFpQixFQUNqQkMsaUJBQWtCLEVBQ2xCQyxpQkFBa0IsRUFDbEJDLGNBQWUsRUFDZkMsWUFBYSxHQzVDZixJQUFJQyxFQUFrQiw0NUhBWXRCLFNDYk1DLEVBQVEsR0FDTCxTQUFVQyxHQUVmLFlBRG1CQyxJQUFmRixFQUFNQyxLQUFvQkQsRUFBTUMsSURDVkUsRUNEb0JGLEVERXpDRixFQUFnQjNELEtBQUsrRCxJQUFnQyxNQUF2QkEsRUFBSzdGLFdBQVcsSUFFM0IsTUFBdkI2RixFQUFLN0YsV0FBVyxJQUVoQjZGLEVBQUs3RixXQUFXLEdBQUssS0NMZjBGLEVBQU1DLEdEQUcsSUFBVUUsSUNKOUIsSUFDTUgsRSxtQkNEbVksU0FBU3pHLElBQUksT0FBT0EsRUFBRTFCLE9BQU91SSxRQUFRLFNBQVN2SCxHQUFHLElBQUksSUFBSWtCLEVBQUUsRUFBRUEsRUFBRXNHLFVBQVVySSxPQUFPK0IsSUFBSSxDQUFDLElBQUlQLEVBQUU2RyxVQUFVdEcsR0FBRyxJQUFJLElBQUlGLEtBQUtMLEVBQUUzQixPQUFPSyxVQUFVQyxlQUFlUixLQUFLNkIsRUFBRUssS0FBS2hCLEVBQUVnQixHQUFHTCxFQUFFSyxJQUFJLE9BQU9oQixJQUFJeUgsTUFBTUMsS0FBS0YsV0FBVyxJQUFJcEgsRUFBRSxTQUFTSixFQUFFa0IsR0FBRyxJQUFJLElBQUlQLEVBQUUsQ0FBQ1gsRUFBRSxJQUFJZ0IsRUFBRSxFQUFFMkcsRUFBRXpHLEVBQUUvQixPQUFPNkIsRUFBRTJHLEVBQUUzRyxHQUFHLEVBQUVMLEVBQUVpSCxLQUFLMUcsRUFBRUYsR0FBR2hCLEVBQUVnQixFQUFFLElBQUksT0FBT0wsR0FBR29ELEVBQUUsU0FBUzdDLEdBQUcsT0FBTyxPQUFPQSxHQUFHLGlCQUFpQkEsR0FBRyxxQkFBcUJBLEVBQUUyRyxTQUFTM0csRUFBRTJHLFdBQVc3SSxPQUFPSyxVQUFVd0ksU0FBUy9JLEtBQUtvQyxPQUFNLFlBQUVBLElBQUl3QixFQUFFMUQsT0FBTzhJLE9BQU8sSUFBSWhGLEVBQUU5RCxPQUFPOEksT0FBTyxJQUFJLFNBQVNySCxFQUFFVCxHQUFHLE1BQU0sbUJBQW1CQSxFQUFFLFNBQVMrSCxFQUFFL0gsR0FBRyxPQUFrRUEsRUFBRWdJLGFBQWFoSSxFQUFFaUksTUFBTSxZQUFZLFNBQVN0RyxFQUFFM0IsR0FBRyxPQUFPQSxHQUFHLGlCQUFpQkEsRUFBRWtJLGtCQUFrQixJQUFJakcsRUFBZ0Msc0JBQVlrRyxtQkFBbUIsc0JBQVlDLFNBQVUsY0FBYzdILEVBQUUsUUFBUVUsRUFBRSxvQkFBb0JvSCxRQUFRLGdCQUFnQkEsT0FBT3pGLEVBQUUwRixRQUFRLGtCQUFrQkMsa0JBQWtCQSx1QkFBK0MsSUFBUyxzQkFBWUMsNkJBQTZCLEtBQUssc0JBQVlBLDRCQUE0QixVQUFVLHNCQUFZQSw2QkFBNkIsc0JBQVlBLGlDQUF5RCxJQUFTLHNCQUFZRCxtQkFBbUIsS0FBSyxzQkFBWUEsbUJBQWtCLFVBQVUsc0JBQVlBLG1CQUFtQixzQkFBWUEsbUJBQXVEdkcsRUFBRSxHQUFrNUcsU0FBU3lHLEVBQUV6SSxHQUFHLElBQUksSUFBSWtCLEVBQUVzRyxVQUFVckksT0FBT3dCLEVBQUUsSUFBSStILE1BQU14SCxFQUFFLEVBQUVBLEVBQUUsRUFBRSxHQUFHRixFQUFFLEVBQUVBLEVBQUVFLEVBQUVGLElBQUlMLEVBQUVLLEVBQUUsR0FBR3dHLFVBQVV4RyxHQUFHLE1BQXlDLElBQUkySCxNQUFNLCtDQUErQzNJLEVBQUUsMEJBQTBCVyxFQUFFeEIsT0FBTyxFQUFFLFVBQVV3QixFQUFFMkIsS0FBSyxNQUFNLEtBQXdELElBQUk2QixFQUFFLFdBQVcsU0FBU25FLEVBQUVBLEdBQUcwSCxLQUFLa0IsV0FBVyxJQUFJQyxZQUFZLEtBQUtuQixLQUFLdkksT0FBTyxJQUFJdUksS0FBS29CLElBQUk5SSxFQUFFLElBQUlrQixFQUFFbEIsRUFBRVgsVUFBVSxPQUFPNkIsRUFBRTZILGFBQWEsU0FBUy9JLEdBQUcsSUFBSSxJQUFJa0IsRUFBRSxFQUFFUCxFQUFFLEVBQUVBLEVBQUVYLEVBQUVXLElBQUlPLEdBQUd3RyxLQUFLa0IsV0FBV2pJLEdBQUcsT0FBT08sR0FBR0EsRUFBRThILFlBQVksU0FBU2hKLEVBQUVrQixHQUFHLEdBQUdsQixHQUFHMEgsS0FBS2tCLFdBQVd6SixPQUFPLENBQUMsSUFBSSxJQUFJd0IsRUFBRStHLEtBQUtrQixXQUFXNUgsRUFBRUwsRUFBRXhCLE9BQU93SSxFQUFFM0csRUFBRWhCLEdBQUcySCxJQUFJQSxJQUFJLEdBQUcsR0FBR2MsRUFBRSxHQUFHLEdBQUd6SSxHQUFHMEgsS0FBS2tCLFdBQVcsSUFBSUMsWUFBWWxCLEdBQUdELEtBQUtrQixXQUFXeEUsSUFBSXpELEdBQUcrRyxLQUFLdkksT0FBT3dJLEVBQUUsSUFBSSxJQUFJc0IsRUFBRWpJLEVBQUVpSSxFQUFFdEIsRUFBRXNCLElBQUl2QixLQUFLa0IsV0FBV0ssR0FBRyxFQUFFLElBQUksSUFBSUMsRUFBRXhCLEtBQUtxQixhQUFhL0ksRUFBRSxHQUFHRSxFQUFFLEVBQUVILEVBQUVtQixFQUFFL0IsT0FBT2UsRUFBRUgsRUFBRUcsSUFBSXdILEtBQUtvQixJQUFJSyxXQUFXRCxFQUFFaEksRUFBRWhCLE1BQU13SCxLQUFLa0IsV0FBVzVJLEtBQUtrSixNQUFNaEksRUFBRWtJLFdBQVcsU0FBU3BKLEdBQUcsR0FBR0EsRUFBRTBILEtBQUt2SSxPQUFPLENBQUMsSUFBSStCLEVBQUV3RyxLQUFLa0IsV0FBVzVJLEdBQUdXLEVBQUUrRyxLQUFLcUIsYUFBYS9JLEdBQUdnQixFQUFFTCxFQUFFTyxFQUFFd0csS0FBS2tCLFdBQVc1SSxHQUFHLEVBQUUsSUFBSSxJQUFJMkgsRUFBRWhILEVBQUVnSCxFQUFFM0csRUFBRTJHLElBQUlELEtBQUtvQixJQUFJTyxXQUFXMUksS0FBS08sRUFBRW9JLFNBQVMsU0FBU3RKLEdBQUcsSUFBSWtCLEVBQUUsR0FBRyxHQUFHbEIsR0FBRzBILEtBQUt2SSxRQUFRLElBQUl1SSxLQUFLa0IsV0FBVzVJLEdBQUcsT0FBT2tCLEVBQUUsSUFBSSxJQUFJUCxFQUFFK0csS0FBS2tCLFdBQVc1SSxHQUFHZ0IsRUFBRTBHLEtBQUtxQixhQUFhL0ksR0FBRzJILEVBQUUzRyxFQUFFTCxFQUFFc0ksRUFBRWpJLEVBQUVpSSxFQUFFdEIsRUFBRXNCLElBQUkvSCxHQUFHd0csS0FBS29CLElBQUlTLFFBQVFOLEdBQUcsWUFBWSxPQUFPL0gsR0FBR2xCLEVBQS80QixHQUFvNUJZLEVBQUUsSUFBSTRJLElBQUluSixFQUFFLElBQUltSixJQUFJQyxFQUFFLEVBQUV0SSxFQUFFLFNBQVNuQixHQUFHLEdBQUdZLEVBQUU4SSxJQUFJMUosR0FBRyxPQUFPWSxFQUFFK0ksSUFBSTNKLEdBQUcsS0FBS0ssRUFBRXFKLElBQUlELElBQUlBLElBQUksSUFBSXZJLEVBQUV1SSxJQUFJLE9BQTBFN0ksRUFBRXdELElBQUlwRSxFQUFFa0IsR0FBR2IsRUFBRStELElBQUlsRCxFQUFFbEIsR0FBR2tCLEdBQUdtQixFQUFFLFNBQVNyQyxHQUFHLE9BQU9LLEVBQUVzSixJQUFJM0osSUFBSUgsRUFBRSxTQUFTRyxFQUFFa0IsR0FBR0EsR0FBR3VJLElBQUlBLEVBQUV2SSxFQUFFLEdBQUdOLEVBQUV3RCxJQUFJcEUsRUFBRWtCLEdBQUdiLEVBQUUrRCxJQUFJbEQsRUFBRWxCLElBQUl3QixFQUFFLFNBQVNTLEVBQUUsaUNBQWlDVSxFQUFFLElBQUlpSCxPQUFPLElBQUkzSCxFQUFFLGdEQUFnRFYsRUFBRSxTQUFTdkIsRUFBRWtCLEVBQUVQLEdBQUcsSUFBSSxJQUFJSyxFQUFFMkcsRUFBRWhILEVBQUVzQyxNQUFNLEtBQUtnRyxFQUFFLEVBQUVDLEVBQUV2QixFQUFFeEksT0FBTzhKLEVBQUVDLEVBQUVELEtBQUtqSSxFQUFFMkcsRUFBRXNCLEtBQUtqSixFQUFFNkosYUFBYTNJLEVBQUVGLElBQUk2QixFQUFFLFNBQVM3QyxFQUFFa0IsR0FBRyxJQUFJLElBQUlQLEdBQUdPLEVBQUU0SSxhQUFhLElBQUk3RyxNQUFNLGFBQWFqQyxFQUFFLEdBQUcyRyxFQUFFLEVBQUVzQixFQUFFdEksRUFBRXhCLE9BQU93SSxFQUFFc0IsRUFBRXRCLElBQUksQ0FBQyxJQUFJdUIsRUFBRXZJLEVBQUVnSCxHQUFHL0YsT0FBTyxHQUFHc0gsRUFBRSxDQUFDLElBQUloSixFQUFFZ0osRUFBRWEsTUFBTXBILEdBQUcsR0FBR3pDLEVBQUUsQ0FBQyxJQUFJSCxFQUFFLEVBQUVpSyxTQUFTOUosRUFBRSxHQUFHLElBQUlZLEVBQUVaLEVBQUUsR0FBRyxJQUFJSCxJQUFJRixFQUFFaUIsRUFBRWYsR0FBR3dCLEVBQUV2QixFQUFFYyxFQUFFWixFQUFFLElBQUlGLEVBQUVpSyxTQUFTakIsWUFBWWpKLEVBQUVpQixJQUFJQSxFQUFFN0IsT0FBTyxPQUFPNkIsRUFBRTRHLEtBQUtzQixNQUFNL0ksRUFBRSxXQUFXLE1BQU0sb0JBQW9Ca0ksYUFBUSxJQUFTQSxPQUFPNkIsa0JBQWtCN0IsT0FBTzZCLGtCQUFrQixNQUFNaEksRUFBRSxTQUFTbEMsR0FBRyxJQUFJa0IsRUFBRWlKLFNBQVNDLEtBQUt6SixFQUFFWCxHQUFHa0IsRUFBRUYsRUFBRW1KLFNBQVNFLGNBQWMsU0FBUzFDLEVBQUUsU0FBUzNILEdBQUcsSUFBSSxJQUFJa0IsRUFBRWxCLEVBQUVzSyxXQUFXM0osRUFBRU8sRUFBRS9CLE9BQU93QixHQUFHLEVBQUVBLElBQUksQ0FBQyxJQUFJSyxFQUFFRSxFQUFFUCxHQUFHLEdBQUdLLEdBQUcsSUFBSUEsRUFBRXVKLFVBQVV2SixFQUFFd0osYUFBYXZJLEdBQUcsT0FBT2pCLEdBQWxILENBQXNITCxHQUFHc0ksT0FBRSxJQUFTdEIsRUFBRUEsRUFBRThDLFlBQVksS0FBS3pKLEVBQUUwSixhQUFhekksRUFBRSxVQUFVakIsRUFBRTBKLGFBQWEsc0JBQXNCLFNBQVMsSUFBSXhCLEVBQUUvSSxJQUFJLE9BQU8rSSxHQUFHbEksRUFBRTBKLGFBQWEsUUFBUXhCLEdBQUd2SSxFQUFFZ0ssYUFBYTNKLEVBQUVpSSxHQUFHakksR0FBRzRKLEVBQUUsV0FBVyxTQUFTNUssRUFBRUEsR0FBRyxJQUFJa0IsRUFBRXdHLEtBQUttRCxRQUFRM0ksRUFBRWxDLEdBQUdrQixFQUFFNEosWUFBWVgsU0FBU1ksZUFBZSxLQUFLckQsS0FBS3NELE1BQU0sU0FBU2hMLEdBQUcsR0FBR0EsRUFBRWdMLE1BQU0sT0FBT2hMLEVBQUVnTCxNQUFNLElBQUksSUFBSTlKLEVBQUVpSixTQUFTYyxZQUFZdEssRUFBRSxFQUFFSyxFQUFFRSxFQUFFL0IsT0FBT3dCLEVBQUVLLEVBQUVMLElBQUksQ0FBQyxJQUFJZ0gsRUFBRXpHLEVBQUVQLEdBQUcsR0FBR2dILEVBQUV1RCxZQUFZbEwsRUFBRSxPQUFPMkgsRUFBRWMsRUFBRSxJQUF0SSxDQUEySXZILEdBQUd3RyxLQUFLdkksT0FBTyxFQUFFLElBQUkrQixFQUFFbEIsRUFBRVgsVUFBVSxPQUFPNkIsRUFBRWlJLFdBQVcsU0FBU25KLEVBQUVrQixHQUFHLElBQUksT0FBT3dHLEtBQUtzRCxNQUFNN0IsV0FBV2pJLEVBQUVsQixHQUFHMEgsS0FBS3ZJLFVBQVMsRUFBRyxNQUFNYSxHQUFHLE9BQU0sSUFBS2tCLEVBQUVtSSxXQUFXLFNBQVNySixHQUFHMEgsS0FBS3NELE1BQU0zQixXQUFXckosR0FBRzBILEtBQUt2SSxVQUFVK0IsRUFBRXFJLFFBQVEsU0FBU3ZKLEdBQUcsSUFBSWtCLEVBQUV3RyxLQUFLc0QsTUFBTUcsU0FBU25MLEdBQUcsWUFBTyxJQUFTa0IsR0FBRyxpQkFBaUJBLEVBQUVrSyxRQUFRbEssRUFBRWtLLFFBQVEsSUFBSXBMLEVBQWxqQixHQUF1akJKLEVBQUUsV0FBVyxTQUFTSSxFQUFFQSxHQUFHLElBQUlrQixFQUFFd0csS0FBS21ELFFBQVEzSSxFQUFFbEMsR0FBRzBILEtBQUsyRCxNQUFNbkssRUFBRW9KLFdBQVc1QyxLQUFLdkksT0FBTyxFQUFFLElBQUkrQixFQUFFbEIsRUFBRVgsVUFBVSxPQUFPNkIsRUFBRWlJLFdBQVcsU0FBU25KLEVBQUVrQixHQUFHLEdBQUdsQixHQUFHMEgsS0FBS3ZJLFFBQVFhLEdBQUcsRUFBRSxDQUFDLElBQUlXLEVBQUV3SixTQUFTWSxlQUFlN0osR0FBR0YsRUFBRTBHLEtBQUsyRCxNQUFNckwsR0FBRyxPQUFPMEgsS0FBS21ELFFBQVFGLGFBQWFoSyxFQUFFSyxHQUFHLE1BQU0wRyxLQUFLdkksVUFBUyxFQUFHLE9BQU0sR0FBSStCLEVBQUVtSSxXQUFXLFNBQVNySixHQUFHMEgsS0FBS21ELFFBQVFTLFlBQVk1RCxLQUFLMkQsTUFBTXJMLElBQUkwSCxLQUFLdkksVUFBVStCLEVBQUVxSSxRQUFRLFNBQVN2SixHQUFHLE9BQU9BLEVBQUUwSCxLQUFLdkksT0FBT3VJLEtBQUsyRCxNQUFNckwsR0FBRzhKLFlBQVksSUFBSTlKLEVBQXJiLEdBQTBiZ0UsRUFBRSxXQUFXLFNBQVNoRSxFQUFFQSxHQUFHMEgsS0FBSzZELE1BQU0sR0FBRzdELEtBQUt2SSxPQUFPLEVBQUUsSUFBSStCLEVBQUVsQixFQUFFWCxVQUFVLE9BQU82QixFQUFFaUksV0FBVyxTQUFTbkosRUFBRWtCLEdBQUcsT0FBT2xCLEdBQUcwSCxLQUFLdkksU0FBU3VJLEtBQUs2RCxNQUFNQyxPQUFPeEwsRUFBRSxFQUFFa0IsR0FBR3dHLEtBQUt2SSxVQUFTLElBQUsrQixFQUFFbUksV0FBVyxTQUFTckosR0FBRzBILEtBQUs2RCxNQUFNQyxPQUFPeEwsRUFBRSxHQUFHMEgsS0FBS3ZJLFVBQVUrQixFQUFFcUksUUFBUSxTQUFTdkosR0FBRyxPQUFPQSxFQUFFMEgsS0FBS3ZJLE9BQU91SSxLQUFLNkQsTUFBTXZMLEdBQUcsSUFBSUEsRUFBelMsR0FBOFNvQixFQUFFSCxFQUFFa0IsRUFBRSxDQUFDc0osVUFBVXhLLEVBQUV5SyxtQkFBbUI5SSxHQUFHTyxFQUFFLFdBQVcsU0FBU25ELEVBQUVBLEVBQUVrQixFQUFFUCxRQUFHLElBQVNYLElBQUlBLEVBQUU4QyxRQUFHLElBQVM1QixJQUFJQSxFQUFFLElBQUl3RyxLQUFLaUUsUUFBUWpMLEVBQUUsR0FBR3lCLEVBQUUsR0FBR25DLEdBQUcwSCxLQUFLa0UsR0FBRzFLLEVBQUV3RyxLQUFLbUUsTUFBTSxJQUFJckMsSUFBSTdJLEdBQUcrRyxLQUFLb0UsU0FBUzlMLEVBQUV5TCxVQUFVL0QsS0FBS29FLFFBQVE3SyxHQUFHRyxJQUFJQSxHQUFFLEVBQUcsU0FBU3BCLEdBQUcsSUFBSSxJQUFJa0IsRUFBRWlKLFNBQVM0QixpQkFBaUJ2SyxHQUFHYixFQUFFLEVBQUVLLEVBQUVFLEVBQUUvQixPQUFPd0IsRUFBRUssRUFBRUwsSUFBSSxDQUFDLElBQUlnSCxFQUFFekcsRUFBRVAsR0FBR2dILEdBQUcsV0FBV0EsRUFBRXFFLGFBQWEvSixLQUFLWSxFQUFFN0MsRUFBRTJILEdBQUdBLEVBQUVzRSxZQUFZdEUsRUFBRXNFLFdBQVdYLFlBQVkzRCxLQUF0SyxDQUE0S0QsT0FBTzFILEVBQUVrTSxXQUFXLFNBQVNsTSxHQUFHLE9BQU9tQixFQUFFbkIsSUFBSSxJQUFJa0IsRUFBRWxCLEVBQUVYLFVBQVUsT0FBTzZCLEVBQUVpTCx1QkFBdUIsU0FBU2pMLEVBQUVQLEdBQUcsWUFBTyxJQUFTQSxJQUFJQSxHQUFFLEdBQUksSUFBSVgsRUFBRVUsRUFBRSxHQUFHZ0gsS0FBS2lFLFFBQVEsR0FBR3pLLEdBQUd3RyxLQUFLa0UsR0FBR2pMLEdBQUcrRyxLQUFLbUUsWUFBTyxJQUFTM0ssRUFBRWtMLG1CQUFtQixTQUFTcE0sR0FBRyxPQUFPMEgsS0FBS2tFLEdBQUc1TCxJQUFJMEgsS0FBS2tFLEdBQUc1TCxJQUFJLEdBQUcsR0FBR2tCLEVBQUUrSSxPQUFPLFdBQVcsT0FBT3ZDLEtBQUtvQixNQUFNcEIsS0FBS29CLEtBQUtuSSxHQUFHTyxFQUFFd0csS0FBS2lFLFNBQVNGLFNBQVN6SyxFQUFFRSxFQUFFd0ssa0JBQWtCL0QsRUFBRXpHLEVBQUVtTCxPQUFPck0sRUFBRVcsRUFBRSxJQUFJcUQsRUFBRTJELEdBQUczRyxFQUFFLElBQUk0SixFQUFFakQsR0FBRyxJQUFJL0gsRUFBRStILEdBQUcsSUFBSXhELEVBQUVuRSxLQUFLLElBQUlBLEVBQUVrQixFQUFFUCxFQUFFSyxFQUFFMkcsR0FBR3pHLEVBQUVvTCxhQUFhLFNBQVN0TSxFQUFFa0IsR0FBRyxPQUFPd0csS0FBS21FLE1BQU1uQyxJQUFJMUosSUFBSTBILEtBQUttRSxNQUFNbEMsSUFBSTNKLEdBQUcwSixJQUFJeEksSUFBSUEsRUFBRTJJLGFBQWEsU0FBUzdKLEVBQUVrQixHQUFHLEdBQUdDLEVBQUVuQixHQUFHMEgsS0FBS21FLE1BQU1uQyxJQUFJMUosR0FBRzBILEtBQUttRSxNQUFNbEMsSUFBSTNKLEdBQUd1TSxJQUFJckwsT0FBTyxDQUFDLElBQUlQLEVBQUUsSUFBSTZMLElBQUk3TCxFQUFFNEwsSUFBSXJMLEdBQUd3RyxLQUFLbUUsTUFBTXpILElBQUlwRSxFQUFFVyxLQUFLTyxFQUFFOEgsWUFBWSxTQUFTaEosRUFBRWtCLEVBQUVQLEdBQUcrRyxLQUFLbUMsYUFBYTdKLEVBQUVrQixHQUFHd0csS0FBS3VDLFNBQVNqQixZQUFZN0gsRUFBRW5CLEdBQUdXLElBQUlPLEVBQUV1TCxXQUFXLFNBQVN6TSxHQUFHMEgsS0FBS21FLE1BQU1uQyxJQUFJMUosSUFBSTBILEtBQUttRSxNQUFNbEMsSUFBSTNKLEdBQUcwTSxTQUFTeEwsRUFBRXlMLFdBQVcsU0FBUzNNLEdBQUcwSCxLQUFLdUMsU0FBU2IsV0FBV2pJLEVBQUVuQixJQUFJMEgsS0FBSytFLFdBQVd6TSxJQUFJa0IsRUFBRTBMLFNBQVMsV0FBV2xGLEtBQUtvQixTQUFJLEdBQVE1SCxFQUFFMkcsU0FBUyxXQUFXLE9BQU8sU0FBUzdILEdBQUcsSUFBSSxJQUFJa0IsRUFBRWxCLEVBQUVpSyxTQUFTdEosRUFBRU8sRUFBRS9CLE9BQU82QixFQUFFLEdBQUcyRyxFQUFFLEVBQUVBLEVBQUVoSCxFQUFFZ0gsSUFBSSxDQUFDLElBQUlzQixFQUFFNUcsRUFBRXNGLEdBQUcsUUFBRyxJQUFTc0IsRUFBRSxDQUFDLElBQUlDLEVBQUVsSixFQUFFNkwsTUFBTWxDLElBQUlWLEdBQUcvSSxFQUFFZ0IsRUFBRW9JLFNBQVMzQixHQUFHLEdBQUd1QixHQUFHaEosR0FBR2dKLEVBQUUyRCxLQUFLLENBQUMsSUFBSTlNLEVBQUVrQyxFQUFFLEtBQUswRixFQUFFLFFBQVFzQixFQUFFLEtBQUtuSSxFQUFFLFFBQUcsSUFBU29JLEdBQUdBLEVBQUU0RCxTQUFRLFNBQVU5TSxHQUFHQSxFQUFFYixPQUFPLElBQUkyQixHQUFHZCxFQUFFLFFBQVFnQixHQUFHLEdBQUdkLEVBQUVILEVBQUUsYUFBYWUsRUFBRSxnQkFBZ0IsT0FBT0UsRUFBOVIsQ0FBaVMwRyxPQUFPMUgsRUFBeGpELEdBQTZqRGEsRUFBRSxXQUFXbUMsRUFBRSxTQUFTaEQsR0FBRyxPQUFPK00sT0FBT0MsYUFBYWhOLEdBQUdBLEVBQUUsR0FBRyxHQUFHLE1BQU0sU0FBU2lOLEVBQUdqTixHQUFHLElBQUlrQixFQUFFUCxFQUFFLEdBQUcsSUFBSU8sRUFBRWdNLEtBQUtDLElBQUluTixHQUFHa0IsRUFBRSxHQUFHQSxFQUFFQSxFQUFFLEdBQUcsRUFBRVAsRUFBRXFDLEVBQUU5QixFQUFFLElBQUlQLEVBQUUsT0FBT3FDLEVBQUU5QixFQUFFLElBQUlQLEdBQUdlLFFBQVFiLEVBQUUsU0FBUyxJQUFJdU0sRUFBRyxTQUFTcE4sRUFBRWtCLEdBQUcsSUFBSSxJQUFJUCxFQUFFTyxFQUFFL0IsT0FBT3dCLEdBQUdYLEVBQUUsR0FBR0EsRUFBRWtCLEVBQUVPLGFBQWFkLEdBQUcsT0FBT1gsR0FBR3FOLEVBQUcsU0FBU3JOLEdBQUcsT0FBT29OLEVBQUcsS0FBS3BOLElBQUksU0FBU3NOLEVBQUd0TixHQUFHLElBQUksSUFBSWtCLEVBQUUsRUFBRUEsRUFBRWxCLEVBQUViLE9BQU8rQixHQUFHLEVBQUUsQ0FBQyxJQUFJUCxFQUFFWCxFQUFFa0IsR0FBRyxHQUFHVCxFQUFFRSxLQUFLZ0IsRUFBRWhCLEdBQUcsT0FBTSxFQUFHLE9BQU0sRUFBRyxJQUFJNE0sR0FBR0YsRUFBRyxTQUFTRyxHQUFHLFdBQVcsU0FBU3hOLEVBQUVBLEVBQUVrQixFQUFFUCxHQUFHK0csS0FBSzZELE1BQU12TCxFQUFFMEgsS0FBSytGLGNBQWMsR0FBRy9GLEtBQUtnRyxlQUErQyxJQUFTL00sR0FBR0EsRUFBRStNLFdBQVdKLEVBQUd0TixHQUFHMEgsS0FBS2lHLFlBQVl6TSxFQUFFd0csS0FBS2tHLFNBQVNSLEVBQUdHLEdBQUdyTSxHQUFHd0csS0FBS21HLFVBQVVsTixFQUFFd0MsRUFBRStJLFdBQVdoTCxHQUFHLE9BQU9sQixFQUFFWCxVQUFVeU8sd0JBQXdCLFNBQVM5TixFQUFFa0IsRUFBRVAsR0FBRyxJQUFJSyxFQUFFMEcsS0FBS2lHLFlBQVloRyxFQUFFLEdBQUcsR0FBR0QsS0FBS21HLFdBQVdsRyxFQUFFQyxLQUFLRixLQUFLbUcsVUFBVUMsd0JBQXdCOU4sRUFBRWtCLEVBQUVQLElBQUkrRyxLQUFLZ0csV0FBVy9NLEVBQUVvTixLQUFLLEdBQUdyRyxLQUFLK0YsZUFBZXZNLEVBQUVvTCxhQUFhdEwsRUFBRTBHLEtBQUsrRixlQUFlOUYsRUFBRUMsS0FBS0YsS0FBSytGLG1CQUFtQixDQUFDLElBQUl4RSxFQUFFK0UsR0FBR3RHLEtBQUs2RCxNQUFNdkwsRUFBRWtCLEVBQUVQLEdBQUcyQixLQUFLLElBQUk0RyxFQUFFK0QsRUFBR0csRUFBRzFGLEtBQUtrRyxTQUFTM0UsS0FBSyxHQUFHLElBQUkvSCxFQUFFb0wsYUFBYXRMLEVBQUVrSSxHQUFHLENBQUMsSUFBSWhKLEVBQUVTLEVBQUVzSSxFQUFFLElBQUlDLE9BQUUsRUFBT2xJLEdBQUdFLEVBQUU4SCxZQUFZaEksRUFBRWtJLEVBQUVoSixHQUFHeUgsRUFBRUMsS0FBS3NCLEdBQUd4QixLQUFLK0YsY0FBY3ZFLE1BQU0sQ0FBQyxJQUFJLElBQUluSixFQUFFMkgsS0FBSzZELE1BQU1wTSxPQUFPMkIsRUFBRXNNLEVBQUcxRixLQUFLa0csU0FBU2pOLEVBQUVvTixNQUFNaE4sRUFBRSxHQUFHakIsRUFBRSxFQUFFQSxFQUFFQyxFQUFFRCxJQUFJLENBQUMsSUFBSUcsRUFBRXlILEtBQUs2RCxNQUFNekwsR0FBRyxHQUFHLGlCQUFpQkcsRUFBRWMsR0FBR2QsT0FBMEQsR0FBR0EsRUFBRSxDQUFDLElBQUlxQixFQUFFME0sR0FBRy9OLEVBQUVELEVBQUVrQixFQUFFUCxHQUFHVSxFQUFFcUgsTUFBTXVGLFFBQVEzTSxHQUFHQSxFQUFFZ0IsS0FBSyxJQUFJaEIsRUFBRVIsRUFBRXNNLEVBQUd0TSxFQUFFTyxFQUFFdkIsR0FBR2lCLEdBQUdNLEdBQUcsR0FBR04sRUFBRSxDQUFDLElBQUlQLEVBQUV5TSxFQUFHbk0sSUFBSSxHQUFHLElBQUlJLEVBQUVvTCxhQUFhdEwsRUFBRVIsR0FBRyxDQUFDLElBQUlGLEVBQUVLLEVBQUVJLEVBQUUsSUFBSVAsT0FBRSxFQUFPUSxHQUFHRSxFQUFFOEgsWUFBWWhJLEVBQUVSLEVBQUVGLEdBQUdxSCxFQUFFQyxLQUFLcEgsSUFBSSxPQUFPbUgsRUFBRXJGLEtBQUssTUFBTXRDLEVBQXRoQyxHQUEyaENrTyxHQUFHLGdCQUFnQkMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBU0MsR0FBR3BPLEdBQUcsSUFBSWtCLEVBQUVQLEVBQUVLLEVBQUUyRyxFQUFFc0IsT0FBRSxJQUFTakosRUFBRThDLEVBQUU5QyxFQUFFa0osRUFBRUQsRUFBRTBDLFFBQVF6TCxPQUFFLElBQVNnSixFQUFFcEcsRUFBRW9HLEVBQUVuSixFQUFFa0osRUFBRW9GLFFBQVF2TixPQUFFLElBQVNmLEVBQUUyQyxFQUFFM0MsRUFBRWdCLEVBQUUsSUFBSSxFQUFFYixHQUFHSixFQUFFLEdBQUdHLEVBQUUsU0FBU0QsR0FBRyxTQUFTa0IsRUFBRUEsR0FBRyxHQUFHQSxFQUFFLElBQUlsQixFQUFFa0IsRUFBRSxLQUFLLE1BQU1sQixLQUFLLE9BQU8sU0FBU1csRUFBRUssRUFBRTJHLEVBQUVzQixFQUFFQyxFQUFFaEosRUFBRUgsRUFBRWUsRUFBRUMsRUFBRWpCLEdBQUcsT0FBT2EsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJSSxHQUFHLEtBQUtDLEVBQUVTLFdBQVcsR0FBRyxPQUFPekIsRUFBRWdCLEVBQUUsS0FBSyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSUYsRUFBRSxPQUFPRSxFQUFFLFFBQVEsTUFBTSxLQUFLLEVBQUUsT0FBT0YsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU9kLEVBQUUySCxFQUFFLEdBQUczRyxHQUFHLEdBQUcsUUFBUSxPQUFPQSxHQUFHLElBQUlsQixFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQUVrQixFQUFFaUMsTUFBTSxVQUFVNkosUUFBUTVMLEtBQXhVLEVBQThVLFNBQVVsQixHQUFHRixFQUFFOEgsS0FBSzVILE1BQU1xQixFQUFFLFNBQVNyQixFQUFFZ0IsRUFBRWlJLEdBQUcsT0FBTyxJQUFJakksSUFBSSxJQUFJbU4sR0FBRy9LLFFBQVE2RixFQUFFdEksRUFBRXhCLFVBQVU4SixFQUFFYyxNQUFNcEMsR0FBRzNILEVBQUUsSUFBSWtCLEdBQUcsU0FBU1YsRUFBRVIsRUFBRWlKLEVBQUVDLEVBQUVoSixRQUFHLElBQVNBLElBQUlBLEVBQUUsS0FBSyxJQUFJSCxFQUFFQyxFQUFFMEIsUUFBUXdNLEdBQUcsSUFBSXBOLEVBQUVtSSxHQUFHQyxFQUFFQSxFQUFFLElBQUlELEVBQUUsTUFBTWxKLEVBQUUsS0FBS0EsRUFBRSxPQUFPbUIsRUFBRWhCLEVBQUVTLEVBQUVzSSxFQUFFakksRUFBRSxJQUFJNEksT0FBTyxLQUFLakosRUFBRSxNQUFNLEtBQUtnSCxFQUFFLElBQUlpQyxPQUFPLE1BQU1qSixFQUFFLFlBQVlJLEVBQUVtSSxJQUFJRCxFQUFFLEdBQUdBLEVBQUVuSSxHQUFHLE9BQU9DLEVBQUVtRCxJQUFJLEdBQUdvSyxPQUFPeE4sRUFBRSxDQUFDLFNBQVNkLEVBQUVrQixFQUFFeUcsR0FBRyxJQUFJM0gsR0FBRzJILEVBQUV4SSxRQUFRd0ksRUFBRSxHQUFHNEcsWUFBWTVOLEdBQUcsSUFBSWdILEVBQUUsR0FBR0EsRUFBRSxHQUFHakcsUUFBUVYsRUFBRUssS0FBS3BCLEVBQUUsU0FBU0QsR0FBRyxJQUFJLElBQUlBLEVBQUUsQ0FBQyxJQUFJa0IsRUFBRXBCLEVBQUUsT0FBT0EsRUFBRSxHQUFHb0IsT0FBT1YsRUFBRXVOLEtBQUtqTixFQUFFM0IsT0FBTzJCLEVBQUUwTixRQUFPLFNBQVV4TyxFQUFFa0IsR0FBRyxPQUFPQSxFQUFFK0csTUFBTVEsRUFBRSxJQUFJMkUsRUFBR3BOLEVBQUVrQixFQUFFK0csUUFBUSxNQUFNSixXQUFXLEdBQUdySCxFQUFFLElBQUlpTyxHQUFHLG9CQUFrQkMsR0FBR0QsR0FBR0UsU0FBU0MsR0FBRyxvQkFBa0JDLElBQUlELEdBQUdELFNBQVMsSUFBSXhMLEdBQUcyTCxHQUFHVixLQUFLLFNBQVNXLEtBQUssT0FBTyxnQkFBRU4sS0FBS0ksR0FBRyxTQUFTRyxLQUFLLE9BQU8sZ0JBQUVKLEtBQUtFLEdBQUcsU0FBU0csR0FBR2pQLEdBQUcsSUFBSWtCLEdBQUUsY0FBRWxCLEVBQUVrUCxlQUFldk8sRUFBRU8sRUFBRSxHQUFHK0gsRUFBRS9ILEVBQUUsR0FBR25CLEVBQUVnUCxLQUFLak8sR0FBRSxjQUFFLFdBQVksSUFBSUksRUFBRW5CLEVBQUUsT0FBT0MsRUFBRWdMLE1BQU05SixFQUFFbEIsRUFBRWdMLE1BQU1oTCxFQUFFcU0sU0FBU25MLEVBQUVBLEVBQUVpTCx1QkFBdUIsQ0FBQ0UsT0FBT3JNLEVBQUVxTSxTQUFRLElBQUtyTSxFQUFFbVAsd0JBQXdCak8sRUFBRUEsRUFBRWlMLHVCQUF1QixDQUFDVCxtQkFBa0IsS0FBTXhLLElBQUksQ0FBQ2xCLEVBQUVtUCxzQkFBc0JuUCxFQUFFZ0wsTUFBTWhMLEVBQUVxTSxTQUFTdEwsR0FBRSxjQUFFLFdBQVksT0FBT3FOLEdBQUcsQ0FBQ3pDLFFBQVEsQ0FBQzFILFFBQVFqRSxFQUFFb1AsdUJBQXVCZixRQUFRMU4sTUFBTSxDQUFDWCxFQUFFb1Asc0JBQXNCek8sSUFBSSxPQUFPLGdCQUFFLFdBQVksSUFBRUEsRUFBRVgsRUFBRWtQLGdCQUFnQmpHLEVBQUVqSixFQUFFa1AsaUJBQWlCLENBQUNsUCxFQUFFa1AsZ0JBQWdCLGtCQUFnQlQsR0FBR1ksU0FBUyxDQUFDQyxNQUFNeE8sR0FBRyxrQkFBZ0I4TixHQUFHUyxTQUFTLENBQUNDLE1BQU12TyxHQUFtRWYsRUFBRXVQLFdBQVcsSUFBSUMsR0FBRyxXQUFXLFNBQVN4UCxFQUFFQSxFQUFFa0IsR0FBRyxJQUFJUCxFQUFFK0csS0FBS0EsS0FBSytILE9BQU8sU0FBU3pQLEVBQUVrQixRQUFHLElBQVNBLElBQUlBLEVBQUU0TixJQUFJLElBQUk5TixFQUFFTCxFQUFFc0gsS0FBSy9HLEVBQUU2TSxLQUFLL04sRUFBRXNNLGFBQWEzTCxFQUFFK08sR0FBRzFPLElBQUloQixFQUFFZ0osWUFBWXJJLEVBQUUrTyxHQUFHMU8sRUFBRUUsRUFBRVAsRUFBRTRLLE1BQU12SyxFQUFFLGdCQUFnQjBHLEtBQUtHLFNBQVMsV0FBVyxPQUFPWSxFQUFFLEdBQUdzRSxPQUFPcE0sRUFBRXNILFFBQVFQLEtBQUtPLEtBQUtqSSxFQUFFMEgsS0FBS2dJLEdBQUcsZ0JBQWdCMVAsRUFBRTBILEtBQUs2RCxNQUFNckssRUFBRSxPQUFPbEIsRUFBRVgsVUFBVXNRLFFBQVEsU0FBUzNQLEdBQUcsWUFBTyxJQUFTQSxJQUFJQSxFQUFFOE8sSUFBSXBILEtBQUtPLEtBQUtqSSxFQUFFK04sTUFBTS9OLEVBQTVXLEdBQWlYNFAsR0FBRyxVQUFVQyxHQUFHLFdBQVdDLEdBQUcsT0FBT0MsR0FBRyxTQUFTL1AsR0FBRyxNQUFNLElBQUlBLEVBQUVnUSxlQUFlLFNBQVNDLEdBQUdqUSxHQUFHLE9BQU80UCxHQUFHck0sS0FBS3ZELEdBQUdBLEVBQUUwQixRQUFRbU8sR0FBR0UsSUFBSXJPLFFBQVFvTyxHQUFHLFFBQVE5UCxFQUFFLElBQUlrUSxHQUFHLFNBQVNsUSxHQUFHLE9BQU8sTUFBTUEsSUFBRyxJQUFLQSxHQUFHLEtBQUtBLEdBQUcsU0FBU2dPLEdBQUdoTyxFQUFFVyxFQUFFSyxFQUFFMkcsR0FBRyxHQUFHZSxNQUFNdUYsUUFBUWpPLEdBQUcsQ0FBQyxJQUFJLElBQUlpSixFQUFFQyxFQUFFLEdBQUdoSixFQUFFLEVBQUVILEVBQUVDLEVBQUViLE9BQU9lLEVBQUVILEVBQUVHLEdBQUcsRUFBRSxNQUFNK0ksRUFBRStFLEdBQUdoTyxFQUFFRSxHQUFHUyxFQUFFSyxFQUFFMkcsTUFBTWUsTUFBTXVGLFFBQVFoRixHQUFHQyxFQUFFdEIsS0FBS0gsTUFBTXlCLEVBQUVELEdBQUdDLEVBQUV0QixLQUFLcUIsSUFBSSxPQUFPQyxFQUFFLE9BQUdnSCxHQUFHbFEsR0FBUyxHQUFNMkIsRUFBRTNCLEdBQVMsSUFBSUEsRUFBRWtJLGtCQUFxQnpILEVBQUVULEdBQU8sbUJBQW1CZSxFQUFFZixJQUFJZSxFQUFFMUIsV0FBVzBCLEVBQUUxQixVQUFVOFEsbUJBQW1CeFAsRUFBU1gsRUFBb1FnTyxHQUE1UGhPLEVBQUVXLEdBQStQQSxFQUFFSyxFQUFFMkcsR0FBZ0IzSCxhQUFhd1AsR0FBR3hPLEdBQUdoQixFQUFFeVAsT0FBT3pPLEVBQUUyRyxHQUFHM0gsRUFBRTJQLFFBQVFoSSxJQUFJM0gsRUFBRStELEVBQUUvRCxHQUFHLFNBQVNBLEVBQUVrQixFQUFFUCxHQUFHLElBQUlLLEVBQUUyRyxFQUFFc0IsRUFBRSxHQUFHLElBQUksSUFBSUMsS0FBS2hJLEVBQUVBLEVBQUU1QixlQUFlNEosS0FBS2dILEdBQUdoUCxFQUFFZ0ksTUFBTVIsTUFBTXVGLFFBQVEvTSxFQUFFZ0ksS0FBS2hJLEVBQUVnSSxHQUFHa0gsT0FBTzNQLEVBQUVTLEVBQUVnSSxJQUFJRCxFQUFFckIsS0FBS3FJLEdBQUcvRyxHQUFHLElBQUloSSxFQUFFZ0ksR0FBRyxLQUFLbkYsRUFBRTdDLEVBQUVnSSxJQUFJRCxFQUFFckIsS0FBS0gsTUFBTXdCLEVBQUVqSixFQUFFa0IsRUFBRWdJLEdBQUdBLElBQUlELEVBQUVyQixLQUFLcUksR0FBRy9HLEdBQUcsTUFBTWxJLEVBQUVrSSxHQUFFLE9BQU92QixFQUFFekcsRUFBRWdJLEtBQUssa0JBQWtCdkIsR0FBRyxLQUFLQSxFQUFFLEdBQUcsaUJBQWlCQSxHQUFHLElBQUlBLEdBQUczRyxLQUFLLEVBQUUrTCxPQUFPcEYsR0FBRy9GLE9BQU8rRixFQUFFLE1BQU0sT0FBTSxPQUFPaEgsRUFBRSxDQUFDQSxFQUFFLE1BQU0yTixPQUFPckYsRUFBRSxDQUFDLE1BQU1BLEVBQTVWLENBQStWakosR0FBR0EsRUFBRTZILFdBQXJyQixJQUFrUjlHLEVBQThhLElBQUlzUCxHQUFHLFNBQVNyUSxHQUFHLE9BQU8wSSxNQUFNdUYsUUFBUWpPLEtBQUtBLEVBQUVvUSxPQUFNLEdBQUlwUSxHQUFHLFNBQVNzUSxHQUFHdFEsR0FBRyxJQUFJLElBQUlrQixFQUFFc0csVUFBVXJJLE9BQU93QixFQUFFLElBQUkrSCxNQUFNeEgsRUFBRSxFQUFFQSxFQUFFLEVBQUUsR0FBR0YsRUFBRSxFQUFFQSxFQUFFRSxFQUFFRixJQUFJTCxFQUFFSyxFQUFFLEdBQUd3RyxVQUFVeEcsR0FBRyxPQUFPUCxFQUFFVCxJQUFJK0QsRUFBRS9ELEdBQUdxUSxHQUFHckMsR0FBRzVOLEVBQUVzQyxFQUFFLENBQUMxQyxHQUFHc08sT0FBTzNOLE1BQU0sSUFBSUEsRUFBRXhCLFFBQVEsSUFBSWEsRUFBRWIsUUFBUSxpQkFBaUJhLEVBQUUsR0FBR0EsRUFBRXFRLEdBQUdyQyxHQUFHNU4sRUFBRUosRUFBRVcsS0FBb0MsSUFBSTZMLElBQW5DLElBQXFyQitELEdBQUcsU0FBU3ZRLEVBQUVrQixFQUFFUCxHQUFHLFlBQU8sSUFBU0EsSUFBSUEsRUFBRW1DLEdBQUc5QyxFQUFFd1EsUUFBUTdQLEVBQUU2UCxPQUFPeFEsRUFBRXdRLE9BQU90UCxHQUFHUCxFQUFFNlAsT0FBT0MsR0FBRyx3Q0FBd0NDLEdBQUcsV0FBVyxTQUFTQyxHQUFHM1EsR0FBRyxPQUFPQSxFQUFFMEIsUUFBUStPLEdBQUcsS0FBSy9PLFFBQVFnUCxHQUFHLElBQUksSUFBSUUsR0FBRyxTQUFTNVEsR0FBRyxPQUFPaU4sRUFBR0ksRUFBR3JOLEtBQUssSUFBSSxTQUFTNlEsR0FBRzdRLEdBQUcsTUFBTSxpQkFBaUJBLElBQUksRUFBOEUsSUFBSThRLEdBQUcsU0FBUzlRLEdBQUcsTUFBTSxtQkFBbUJBLEdBQUcsaUJBQWlCQSxHQUFHLE9BQU9BLElBQUkwSSxNQUFNdUYsUUFBUWpPLElBQUkrUSxHQUFHLFNBQVMvUSxHQUFHLE1BQU0sY0FBY0EsR0FBRyxnQkFBZ0JBLEdBQUcsY0FBY0EsR0FBRyxTQUFTZ1IsR0FBR2hSLEVBQUVrQixFQUFFUCxHQUFHLElBQUlLLEVBQUVoQixFQUFFVyxHQUFHbVEsR0FBRzVQLElBQUk0UCxHQUFHOVAsR0FBR2lRLEdBQUdqUSxFQUFFRSxHQUFHbEIsRUFBRVcsR0FBR08sRUFBRSxTQUFTK1AsR0FBR2pSLEdBQUcsSUFBSSxJQUFJa0IsRUFBRXNHLFVBQVVySSxPQUFPd0IsRUFBRSxJQUFJK0gsTUFBTXhILEVBQUUsRUFBRUEsRUFBRSxFQUFFLEdBQUdGLEVBQUUsRUFBRUEsRUFBRUUsRUFBRUYsSUFBSUwsRUFBRUssRUFBRSxHQUFHd0csVUFBVXhHLEdBQUcsSUFBSSxJQUFJMkcsRUFBRSxFQUFFc0IsRUFBRXRJLEVBQUVnSCxFQUFFc0IsRUFBRTlKLE9BQU93SSxJQUFJLENBQUMsSUFBSXVCLEVBQUVELEVBQUV0QixHQUFHLEdBQUdtSixHQUFHNUgsR0FBRyxJQUFJLElBQUloSixLQUFLZ0osRUFBRTZILEdBQUc3USxJQUFJOFEsR0FBR2hSLEVBQUVrSixFQUFFaEosR0FBR0EsR0FBRyxPQUFPRixFQUFFLElBQUlrUixHQUFHLG9CQUFrQkMsR0FBR0QsR0FBR3ZDLFNBQVMsU0FBU3lDLEdBQUdwUixHQUFHLElBQUlrQixHQUFFLGdCQUFFZ1EsSUFBSXZRLEdBQUUsY0FBRSxXQUFZLE9BQU8sU0FBU1gsRUFBRWtCLEdBQUcsT0FBSWxCLEVBQWtCUyxFQUFFVCxHQUFVQSxFQUFFa0IsR0FBNEd3SCxNQUFNdUYsUUFBUWpPLElBQUksaUJBQWlCQSxFQUFFeUksRUFBRSxHQUFHdkgsRUFBRVIsRUFBRSxHQUFHUSxFQUFFLEdBQUdsQixHQUFHQSxFQUE1THlJLEVBQUUsSUFBN0IsQ0FBME56SSxFQUFFd1EsTUFBTXRQLEtBQUssQ0FBQ2xCLEVBQUV3USxNQUFNdFAsSUFBSSxPQUFPbEIsRUFBRXVQLFNBQVMsa0JBQWdCMkIsR0FBRzdCLFNBQVMsQ0FBQ0MsTUFBTTNPLEdBQUdYLEVBQUV1UCxVQUFVLEtBQUssSUFBSThCLEdBQUcsR0FBRyxTQUFTQyxHQUFHdFIsRUFBRWtCLEVBQUVQLEdBQUcsSUFBSWdILEVBQUVoRyxFQUFFM0IsR0FBR2tKLEdBQUcySCxHQUFHN1EsR0FBR0UsRUFBRWdCLEVBQUVxUSxNQUFNeFIsT0FBRSxJQUFTRyxFQUFFd0MsRUFBRXhDLEVBQUVKLEVBQUVvQixFQUFFeU0sWUFBWTFOLE9BQUUsSUFBU0gsRUFBRSxTQUFTRSxFQUFFa0IsR0FBRyxJQUFJUCxFQUFFLGlCQUFpQlgsRUFBRSxLQUFLMlEsR0FBRzNRLEdBQUdxUixHQUFHMVEsSUFBSTBRLEdBQUcxUSxJQUFJLEdBQUcsRUFBRSxJQUFJSyxFQUFFTCxFQUFFLElBQUlpUSxHQUFHLFFBQVFqUSxFQUFFMFEsR0FBRzFRLElBQUksT0FBT08sRUFBRUEsRUFBRSxJQUFJRixFQUFFQSxFQUF0SCxDQUF5SEUsRUFBRThHLFlBQVk5RyxFQUFFc1EsbUJBQW1CMVIsRUFBRXdCLEVBQUVKLEVBQUU4RyxZQUFZM0csT0FBRSxJQUFTQyxFQUFFLFNBQVN0QixHQUFHLE9BQU82USxHQUFHN1EsR0FBRyxVQUFVQSxFQUFFLFVBQVUrSCxFQUFFL0gsR0FBRyxJQUFwRCxDQUF5REEsR0FBR3NCLEVBQUVsQixFQUFFYyxFQUFFOEcsYUFBYTlHLEVBQUV5TSxZQUFZZ0QsR0FBR3pQLEVBQUU4RyxhQUFhLElBQUk5RyxFQUFFeU0sWUFBWXpNLEVBQUV5TSxhQUFhMU4sRUFBRThELEVBQUU0RCxHQUFHM0gsRUFBRXVSLE1BQU03SSxNQUFNckosVUFBVWlQLE9BQU90TyxFQUFFdVIsTUFBTXhSLEdBQUcwUixPQUFPbkosU0FBU3ZJLEVBQUVrQyxFQUFFZixFQUFFd1Esa0JBQWtCL0osR0FBRzNILEVBQUUwUixvQkFBb0J6UCxFQUFFZixFQUFFd1Esa0JBQWtCLFNBQVMvUSxFQUFFSyxFQUFFMkcsR0FBRyxPQUFPM0gsRUFBRTBSLGtCQUFrQi9RLEVBQUVLLEVBQUUyRyxJQUFJekcsRUFBRXdRLGtCQUFrQi9RLEVBQUVLLEVBQUUyRyxJQUFJM0gsRUFBRTBSLG1CQUFtQixJQUFJblIsRUFBRVUsRUFBRSxJQUFJdU0sR0FBRzdNLEVBQUVQLEVBQUV1SCxFQUFFM0gsRUFBRTJSLG9CQUFlLEdBQVEvTyxFQUFFM0IsRUFBRXlNLFVBQVUsSUFBSTNOLEVBQUVaLE9BQU82QyxFQUFFLFNBQVNoQyxFQUFFa0IsR0FBRyxPQUFPLFNBQVNsQixFQUFFa0IsRUFBRVAsRUFBRUssR0FBRyxJQUFJMkcsRUFBRTNILEVBQUV1UixNQUFNckksRUFBRWxKLEVBQUUyUixlQUFlelIsRUFBRUYsRUFBRTRSLGFBQWE3UixFQUFFQyxFQUFFNlIsbUJBQW1CL1IsRUFBRUUsRUFBRTBSLGtCQUFrQnpSLEVBQUVELEVBQUVrSSxrQkFBa0I1RyxFQUFFdEIsRUFBRXFNLE9BQXFEaEwsRUFBRSxTQUFTckIsRUFBRWtCLEVBQUVQLFFBQUcsSUFBU1gsSUFBSUEsRUFBRThDLEdBQUcsSUFBSTlCLEVBQUVOLEVBQUUsR0FBR1EsRUFBRSxDQUFDc1AsTUFBTXhRLElBQUkySCxFQUFFLEdBQUcsT0FBT2hILEVBQUVtTSxTQUFRLFNBQVU5TSxHQUFHLElBQUlrQixFQUFFUCxFQUFFc0ksRUFBRUMsRUFBRWxKLEVBQUUsSUFBSWtCLEtBQUtULEVBQUV5SSxLQUFLQSxFQUFFQSxFQUFFbEksSUFBSWtJLEVBQUVsSSxFQUFFRSxHQUFHeUcsRUFBRXpHLEdBQUcsY0FBY0EsR0FBR1AsRUFBRWdILEVBQUV6RyxHQUFHK0gsRUFBRUMsRUFBRWhJLEdBQUdQLEdBQUdzSSxFQUFFdEksRUFBRSxJQUFJc0ksRUFBRXRJLEdBQUdzSSxHQUFHQyxFQUFFaEksTUFBTSxDQUFDRixFQUFFMkcsR0FBNU0sQ0FBZ040SSxHQUFHclAsR0FBRSxnQkFBRWdRLElBQUloUixJQUFJNEMsRUFBRTVCLEVBQUV5RyxHQUFHckgsRUFBRWUsRUFBRSxHQUFHakIsRUFBRWlCLEVBQUUsR0FBRzBDLEVBQUUsU0FBUy9ELEVBQUVrQixFQUFFUCxFQUFFSyxHQUFHLElBQUkyRyxFQUFFb0gsS0FBSzlGLEVBQUUrRixLQUEyRSxPQUFwRTlOLEVBQUVsQixFQUFFOE4sd0JBQXdCaEwsRUFBRTZFLEVBQUVzQixHQUFHakosRUFBRThOLHdCQUF3Qm5OLEVBQUVnSCxFQUFFc0IsR0FBdkcsQ0FBOE1DLEVBQUVsSSxFQUFFVixHQUFtRW9DLEVBQUUvQixFQUFFb0gsRUFBRTNILEVBQUUwUixLQUFLNVEsRUFBRTRRLEtBQUsxUixFQUFFMlIsSUFBSTdRLEVBQUU2USxJQUFJelEsRUFBRUssRUFBRWtQLEdBQUc5SSxHQUFHOUYsRUFBRTdCLElBQUljLEVBQUVSLEVBQUUsR0FBR1EsRUFBRSxHQUFHZCxHQUFHYyxFQUFFWCxFQUFFLEdBQUcsSUFBSSxJQUFJVSxLQUFLZ0IsRUFBRSxNQUFNaEIsRUFBRSxJQUFJLE9BQU9BLElBQUksZ0JBQWdCQSxFQUFFVixFQUFFd1IsR0FBRzlQLEVBQUVoQixJQUFJbkIsRUFBRUEsRUFBRW1CLEVBQUUsRUFBRThHLElBQUlwRyxHQUFHLEVBQUVWLE1BQU1WLEVBQUVVLEdBQUdnQixFQUFFaEIsS0FBSyxPQUFPQyxFQUFFOFEsT0FBTzVSLEVBQUU0UixRQUFROVEsRUFBRThRLFFBQVF6UixFQUFFeVIsTUFBTXRSLEVBQUUsR0FBR1EsRUFBRThRLE1BQU0sR0FBRzVSLEVBQUU0UixRQUFRelIsRUFBRTBSLFVBQVV2SixNQUFNckosVUFBVWlQLE9BQU92TyxFQUFFRSxFQUFFOEQsSUFBSTlELEVBQUU4RCxFQUFFLEtBQUs3QyxFQUFFK1EsVUFBVTdSLEVBQUU2UixXQUFXUixPQUFPbkosU0FBU2hHLEtBQUssS0FBSy9CLEVBQUUyUixJQUFJeFAsR0FBRSxtQkFBRXFGLEVBQUV4SCxHQUFsakMsQ0FBc2pDQSxFQUFFUCxFQUFFa0IsRUFBRTBCLElBQUksT0FBT1osRUFBRWdHLFlBQVkzRyxHQUFHZCxFQUFFLGVBQWF5QixJQUFJdVAsTUFBTXhOLEVBQUV4RCxFQUFFb1IsZUFBZTFRLEVBQUVWLEVBQUV5SCxZQUFZM0csRUFBRWQsRUFBRW1SLGtCQUFrQnpQLEVBQUUxQixFQUFFc1IsbUJBQW1CbEssRUFBRWUsTUFBTXJKLFVBQVVpUCxPQUFPdE8sRUFBRTZSLG1CQUFtQjdSLEVBQUVrSSxtQkFBbUJ4RixFQUFFbkMsRUFBRTJILGtCQUFrQjlILEVBQUVHLEVBQUU4TCxPQUFPMUUsRUFBRTNILEVBQUVxTSxPQUFPck0sRUFBRU8sRUFBRTRSLGNBQWMsU0FBU25TLEdBQUcsSUFBSWdCLEVBQUVFLEVBQUV5TSxZQUFZaEcsRUFBRSxTQUFTM0gsRUFBRWtCLEdBQUcsR0FBRyxNQUFNbEIsRUFBRSxNQUFNLEdBQUcsSUFBSVcsRUFBRUssRUFBRTJHLEVBQUUsR0FBR3NCLEVBQUVqSyxPQUFPQyxLQUFLZSxHQUFHLElBQUlnQixFQUFFLEVBQUVBLEVBQUVpSSxFQUFFOUosT0FBTzZCLElBQUlMLEVBQUVzSSxFQUFFakksR0FBR0UsRUFBRWtDLFFBQVF6QyxJQUFJLElBQUlnSCxFQUFFaEgsR0FBR1gsRUFBRVcsSUFBSSxPQUFPZ0gsRUFBbEksQ0FBcUl6RyxFQUFFLENBQUMsZ0JBQWdCK0gsRUFBRWpJLEdBQUdBLEVBQUUsS0FBSzZQLEdBQUc3USxHQUFHQSxFQUFFMlEsR0FBRzVJLEVBQUUvSCxLQUFLLE9BQU9zUixHQUFHdFIsRUFBRVUsRUFBRSxHQUFHaUgsRUFBRSxDQUFDNEosTUFBTXhOLEVBQUU0SixZQUFZMUUsSUFBSXRJLElBQUkzQixPQUFPb1QsZUFBZTdSLEVBQUUsZUFBZSxDQUFDb0osSUFBSSxXQUFXLE9BQU9qQyxLQUFLMksscUJBQXFCak8sSUFBSSxTQUFTbEQsR0FBR3dHLEtBQUsySyxvQkFBb0IxSyxFQUFFc0osR0FBRyxHQUFHalIsRUFBRTRSLGFBQWExUSxHQUFHQSxLQUFnaUJYLEVBQUVzSCxTQUFTLFdBQVcsTUFBTSxJQUFJdEgsRUFBRTJILG1CQUFtQmdCLEdBQUcsSUFBRTNJLEVBQUVQLEVBQUUsQ0FBQ3VSLE9BQU0sRUFBR0ksZ0JBQWUsRUFBRzNKLGFBQVksRUFBRzZKLG9CQUFtQixFQUFHSCxtQkFBa0IsRUFBR3hKLG1CQUFrQixFQUFHbUUsUUFBTyxFQUFHOEYsZUFBYyxJQUFLNVIsRUFBRSxJQUFJK1IsR0FBRyxTQUFTdFMsR0FBRyxPQUFPLFNBQVNBLEVBQUVrQixFQUFFRixFQUFFMkcsR0FBRyxRQUFHLElBQVNBLElBQUlBLEVBQUU3RSxLQUFJLHdCQUFFOUIsR0FBRyxPQUFPeUgsRUFBRSxFQUFFc0UsT0FBTy9MLElBQUksSUFBSWlJLEVBQUUsV0FBVyxPQUFPL0gsRUFBRUYsRUFBRTJHLEVBQUUySSxHQUFHN0ksV0FBTSxFQUFPRCxhQUFhLE9BQU95QixFQUFFc0osV0FBVyxTQUFTNVIsR0FBRyxPQUFPWCxFQUFFa0IsRUFBRUYsRUFBRU4sRUFBRSxHQUFHaUgsRUFBRSxHQUFHaEgsS0FBS3NJLEVBQUVzSSxNQUFNLFNBQVM1USxHQUFHLE9BQU9YLEVBQUVrQixFQUFFRixFQUFFTixFQUFFLEdBQUdpSCxFQUFFLENBQUM0SixNQUFNN0ksTUFBTXJKLFVBQVVpUCxPQUFPM0csRUFBRTRKLE1BQU01USxHQUFHOFEsT0FBT25KLGFBQWFXLEVBQS9SLENBQWtTcUksR0FBR3RSLElBQUksQ0FBQyxJQUFJLE9BQU8sVUFBVSxPQUFPLFVBQVUsUUFBUSxRQUFRLElBQUksT0FBTyxNQUFNLE1BQU0sTUFBTSxhQUFhLE9BQU8sS0FBSyxTQUFTLFNBQVMsVUFBVSxPQUFPLE9BQU8sTUFBTSxXQUFXLE9BQU8sV0FBVyxLQUFLLE1BQU0sVUFBVSxNQUFNLFNBQVMsTUFBTSxLQUFLLEtBQUssS0FBSyxRQUFRLFdBQVcsYUFBYSxTQUFTLFNBQVMsT0FBTyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLFNBQVMsU0FBUyxLQUFLLE9BQU8sSUFBSSxTQUFTLE1BQU0sUUFBUSxNQUFNLE1BQU0sU0FBUyxRQUFRLFNBQVMsS0FBSyxPQUFPLE9BQU8sTUFBTSxPQUFPLFVBQVUsT0FBTyxXQUFXLE9BQU8sUUFBUSxNQUFNLFdBQVcsU0FBUyxLQUFLLFdBQVcsU0FBUyxTQUFTLElBQUksUUFBUSxVQUFVLE1BQU0sV0FBVyxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksT0FBTyxTQUFTLFVBQVUsU0FBUyxRQUFRLFNBQVMsT0FBTyxTQUFTLFFBQVEsTUFBTSxVQUFVLE1BQU0sUUFBUSxRQUFRLEtBQUssV0FBVyxRQUFRLEtBQUssUUFBUSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxNQUFNLFFBQVEsTUFBTSxTQUFTLFdBQVcsT0FBTyxVQUFVLGdCQUFnQixJQUFJLFFBQVEsT0FBTyxpQkFBaUIsU0FBUyxPQUFPLE9BQU8sVUFBVSxVQUFVLFdBQVcsaUJBQWlCLE9BQU8sT0FBTyxNQUFNLE9BQU8sV0FBVyxTQUFTOE0sU0FBUSxTQUFVOU0sR0FBR3NTLEdBQUd0UyxHQUFHc1MsR0FBR3RTLE1BQU0sSUFBSXdTLEdBQUcsV0FBVyxTQUFTeFMsRUFBRUEsRUFBRWtCLEdBQUd3RyxLQUFLNkQsTUFBTXZMLEVBQUUwSCxLQUFLaUcsWUFBWXpNLEVBQUV3RyxLQUFLZ0csU0FBU0osRUFBR3ROLEdBQUdtRCxFQUFFK0ksV0FBV3hFLEtBQUtpRyxZQUFZLEdBQUcsSUFBSXpNLEVBQUVsQixFQUFFWCxVQUFVLE9BQU82QixFQUFFdVIsYUFBYSxTQUFTelMsRUFBRWtCLEVBQUVQLEVBQUVLLEdBQUcsSUFBSTJHLEVBQUUzRyxFQUFFZ04sR0FBR3RHLEtBQUs2RCxNQUFNckssRUFBRVAsRUFBRUssR0FBR3NCLEtBQUssSUFBSSxJQUFJMkcsRUFBRXZCLEtBQUtpRyxZQUFZM04sRUFBRVcsRUFBRXFJLFlBQVlDLEVBQUVBLEVBQUV0QixJQUFJekcsRUFBRXdSLGFBQWEsU0FBUzFTLEVBQUVrQixHQUFHQSxFQUFFeUwsV0FBV2pGLEtBQUtpRyxZQUFZM04sSUFBSWtCLEVBQUV5UixhQUFhLFNBQVMzUyxFQUFFa0IsRUFBRVAsRUFBRUssR0FBR2hCLEVBQUUsR0FBR21ELEVBQUUrSSxXQUFXeEUsS0FBS2lHLFlBQVkzTixHQUFHMEgsS0FBS2dMLGFBQWExUyxFQUFFVyxHQUFHK0csS0FBSytLLGFBQWF6UyxFQUFFa0IsRUFBRVAsRUFBRUssSUFBSWhCLEVBQXhiLEdBQTZiLFNBQVM0UyxHQUFHNVMsR0FBRyxJQUFJLElBQUlrQixFQUFFc0csVUFBVXJJLE9BQU93QixFQUFFLElBQUkrSCxNQUFNeEgsRUFBRSxFQUFFQSxFQUFFLEVBQUUsR0FBR3lHLEVBQUUsRUFBRUEsRUFBRXpHLEVBQUV5RyxJQUFJaEgsRUFBRWdILEVBQUUsR0FBR0gsVUFBVUcsR0FBRyxJQUFJdUIsRUFBRW9ILEdBQUc3SSxXQUFNLEVBQU8sQ0FBQ3pILEdBQUdzTyxPQUFPM04sSUFBSVQsRUFBRSxhQUFhMFEsR0FBR2lDLEtBQUtDLFVBQVU1SixJQUFJcEksRUFBRSxJQUFJMFIsR0FBR3RKLEVBQUVoSixHQUFHLFNBQVNhLEVBQUVmLEdBQUcsSUFBSWtCLEVBQUU2TixLQUFLcE8sRUFBRXFPLEtBQUtySCxHQUFFLGdCQUFFdUosSUFBSW5RLEdBQUUsWUFBRUcsRUFBRWtMLG1CQUFtQmxNLElBQUk2UyxRQUFRLE9BQXlvQjdSLEVBQUU0SyxRQUFRN0wsRUFBRWMsRUFBRWYsRUFBRWtCLEVBQUV5RyxFQUFFaEgsSUFBRyxzQkFBRSxXQUFZLElBQUlPLEVBQUU0SyxPQUFPLE9BQU83TCxFQUFFYyxFQUFFZixFQUFFa0IsRUFBRXlHLEVBQUVoSCxHQUFHLFdBQVcsT0FBT0csRUFBRTRSLGFBQWEzUixFQUFFRyxNQUFNLENBQUNILEVBQUVmLEVBQUVrQixFQUFFeUcsRUFBRWhILElBQUksS0FBSyxTQUFTVixFQUFFRCxFQUFFa0IsRUFBRVAsRUFBRUssRUFBRTJHLEdBQUcsR0FBRzdHLEVBQUU0TSxTQUFTNU0sRUFBRTZSLGFBQWEzUyxFQUFFZ0MsRUFBRXJCLEVBQUVnSCxPQUFPLENBQUMsSUFBSXNCLEVBQUV2SSxFQUFFLEdBQUdRLEVBQUUsQ0FBQ3NQLE1BQU1ELEdBQUdyUCxFQUFFRixFQUFFRCxFQUFFNlEsZ0JBQWdCOVEsRUFBRTZSLGFBQWEzUyxFQUFFaUosRUFBRXRJLEVBQUVnSCxJQUFJLE9BQWlELFNBQU81RyxHQUFHLFNBQVNpUyxHQUFHaFQsR0FBME8sSUFBSSxJQUFJa0IsRUFBRXNHLFVBQVVySSxPQUFPd0IsRUFBRSxJQUFJK0gsTUFBTXhILEVBQUUsRUFBRUEsRUFBRSxFQUFFLEdBQUdGLEVBQUUsRUFBRUEsRUFBRUUsRUFBRUYsSUFBSUwsRUFBRUssRUFBRSxHQUFHd0csVUFBVXhHLEdBQUcsSUFBSTJHLEVBQUUySSxHQUFHN0ksV0FBTSxFQUFPLENBQUN6SCxHQUFHc08sT0FBTzNOLElBQUkyQixLQUFLLElBQUkyRyxFQUFFMkgsR0FBR2pKLEdBQUcsT0FBTyxJQUFJNkgsR0FBR3ZHLEVBQUV0QixHQUFHLElBQUlzTCxHQUFHLFdBQVcsU0FBU2pULElBQUksSUFBSUEsRUFBRTBILEtBQUtBLEtBQUt3TCxjQUFjLFdBQVcsSUFBSWhTLEVBQUVsQixFQUFFbVQsU0FBU3RMLFdBQVcsSUFBSTNHLEVBQUUsTUFBTSxHQUFHLElBQUlQLEVBQUVSLElBQUksTUFBTSxVQUFVLENBQUNRLEdBQUcsVUFBVUEsRUFBRSxJQUFJc0IsRUFBRSxVQUFVLCtCQUErQndQLE9BQU9uSixTQUFTaEcsS0FBSyxLQUFLLElBQUlwQixFQUFFLFlBQVl3RyxLQUFLMEwsYUFBYSxXQUFXLE9BQU9wVCxFQUFFcVQsT0FBTzVLLEVBQUUsR0FBR3pJLEVBQUVrVCxpQkFBaUJ4TCxLQUFLNEwsZ0JBQWdCLFdBQVcsSUFBSXBTLEVBQUUsR0FBR2xCLEVBQUVxVCxPQUFPLE9BQU81SyxFQUFFLEdBQUcsSUFBSTlILElBQUlPLEVBQUUsSUFBSWUsR0FBRyxHQUFHZixFQUFFLHVCQUF1QixRQUFRQSxFQUFFcVMsd0JBQXdCLENBQUNDLE9BQU94VCxFQUFFbVQsU0FBU3RMLFlBQVkzRyxHQUFHeUcsRUFBRXhILElBQUksT0FBT3dILElBQUloSCxFQUFFOFMsTUFBTTlMLEdBQUcsQ0FBQyxrQkFBZ0IsUUFBUWpILEVBQUUsR0FBR0MsRUFBRSxDQUFDbEIsSUFBSSxjQUFjaUksS0FBS2dNLEtBQUssV0FBVzFULEVBQUVxVCxRQUFPLEdBQUkzTCxLQUFLeUwsU0FBUyxJQUFJaFEsRUFBRSxDQUFDc0ksVUFBUyxJQUFLL0QsS0FBSzJMLFFBQU8sRUFBRyxJQUFJblMsRUFBRWxCLEVBQUVYLFVBQVUsT0FBTzZCLEVBQUV5UyxjQUFjLFNBQVMzVCxHQUFHLE9BQU8wSCxLQUFLMkwsT0FBTzVLLEVBQUUsR0FBRyxrQkFBZ0J3RyxHQUFHLENBQUNqRSxNQUFNdEQsS0FBS3lMLFVBQVVuVCxJQUFJa0IsRUFBRTBTLHlCQUF5QixTQUFTNVQsR0FBRyxPQUFPeUksRUFBRSxJQUFJekksRUFBdHpCLEdBQTJ6QjZULEdBQUcsU0FBUzdULEdBQUcsSUFBSWtCLEVBQUUsZ0JBQWEsU0FBVUEsRUFBRVAsR0FBRyxJQUFJZ0gsR0FBRSxnQkFBRXVKLElBQUloSSxFQUFFbEosRUFBRTRSLGFBQWExUixFQUFFcVEsR0FBR3JQLEVBQUV5RyxFQUFFdUIsR0FBRyxPQUF1TSxrQkFBZ0JsSixFQUFFVSxFQUFFLEdBQUdRLEVBQUUsQ0FBQ3NQLE1BQU10USxFQUFFZ1MsSUFBSXZSLFFBQVEsT0FBTyxJQUFFTyxFQUFFbEIsR0FBR2tCLEVBQUU4RyxZQUFZLGFBQWFELEVBQUUvSCxHQUFHLElBQUlrQixHQUFHNFMsR0FBRyxXQUFXLE9BQU8sZ0JBQUU1QyxLQUFLNkMsR0FBRyxDQUFDQyxXQUFXN1EsRUFBRThRLFlBQVlwRixJQUEwNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zaGFsbG93ZXF1YWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGlzL2Rpc3Qvc3R5bGlzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvdW5pdGxlc3MuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvc3R5bGVkLWNvbXBvbmVudHMvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2lzLXByb3AtdmFsaWQvZGlzdC9pcy1wcm9wLXZhbGlkLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3N0eWxlZC1jb21wb25lbnRzL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvbWVtb2l6ZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zdHlsZWQtY29tcG9uZW50cy9kaXN0L3N0eWxlZC1jb21wb25lbnRzLmJyb3dzZXIuZXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIsIGNvbXBhcmUsIGNvbXBhcmVDb250ZXh0KSB7XG4gIHZhciByZXQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCBvYmpBLCBvYmpCKSA6IHZvaWQgMDtcblxuICBpZiAocmV0ICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gISFyZXQ7XG4gIH1cblxuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSBcIm9iamVjdFwiIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSBcIm9iamVjdFwiIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBrZXkgPSBrZXlzQVtpZHhdO1xuXG4gICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUEgPSBvYmpBW2tleV07XG4gICAgdmFyIHZhbHVlQiA9IG9iakJba2V5XTtcblxuICAgIHJldCA9IGNvbXBhcmUgPyBjb21wYXJlLmNhbGwoY29tcGFyZUNvbnRleHQsIHZhbHVlQSwgdmFsdWVCLCBrZXkpIDogdm9pZCAwO1xuXG4gICAgaWYgKHJldCA9PT0gZmFsc2UgfHwgKHJldCA9PT0gdm9pZCAwICYmIHZhbHVlQSAhPT0gdmFsdWVCKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImZ1bmN0aW9uIHN0eWxpc19taW4gKFcpIHtcbiAgZnVuY3Rpb24gTShkLCBjLCBlLCBoLCBhKSB7XG4gICAgZm9yICh2YXIgbSA9IDAsIGIgPSAwLCB2ID0gMCwgbiA9IDAsIHEsIGcsIHggPSAwLCBLID0gMCwgaywgdSA9IGsgPSBxID0gMCwgbCA9IDAsIHIgPSAwLCBJID0gMCwgdCA9IDAsIEIgPSBlLmxlbmd0aCwgSiA9IEIgLSAxLCB5LCBmID0gJycsIHAgPSAnJywgRiA9ICcnLCBHID0gJycsIEM7IGwgPCBCOykge1xuICAgICAgZyA9IGUuY2hhckNvZGVBdChsKTtcbiAgICAgIGwgPT09IEogJiYgMCAhPT0gYiArIG4gKyB2ICsgbSAmJiAoMCAhPT0gYiAmJiAoZyA9IDQ3ID09PSBiID8gMTAgOiA0NyksIG4gPSB2ID0gbSA9IDAsIEIrKywgSisrKTtcblxuICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgaWYgKGwgPT09IEogJiYgKDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSksIDAgPCBmLnRyaW0oKS5sZW5ndGgpKSB7XG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZiArPSBlLmNoYXJBdChsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnID0gNTk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgIGYgPSBmLnRyaW0oKTtcbiAgICAgICAgICAgIHEgPSBmLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBrID0gMTtcblxuICAgICAgICAgICAgZm9yICh0ID0gKytsOyBsIDwgQjspIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxMjM6XG4gICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgICAgICAgICAgay0tO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChnID0gZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodSA9IGwgKyAxOyB1IDwgSjsgKyt1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5jaGFyQ29kZUF0KHUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0MiA9PT0gZyAmJiA0MiA9PT0gZS5jaGFyQ29kZUF0KHUgLSAxKSAmJiBsICsgMiAhPT0gdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICg0NyA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgIGcrKztcblxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgIGZvciAoOyBsKysgPCBKICYmIGUuY2hhckNvZGVBdChsKSAhPT0gZzspIHtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKDAgPT09IGspIGJyZWFrO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgPSBlLnN1YnN0cmluZyh0LCBsKTtcbiAgICAgICAgICAgIDAgPT09IHEgJiYgKHEgPSAoZiA9IGYucmVwbGFjZShjYSwgJycpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAocSkge1xuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIDAgPCByICYmIChmID0gZi5yZXBsYWNlKE4sICcnKSk7XG4gICAgICAgICAgICAgICAgZyA9IGYuY2hhckNvZGVBdCgxKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByID0gTztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBrID0gTShjLCByLCBrLCBnLCBhICsgMSk7XG4gICAgICAgICAgICAgICAgdCA9IGsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIDAgPCBBICYmIChyID0gWChPLCBmLCBJKSwgQyA9IEgoMywgaywgciwgYywgRCwgeiwgdCwgZywgYSwgaCksIGYgPSByLmpvaW4oJycpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHQgPSAoayA9IEMudHJpbSgpKS5sZW5ndGgpICYmIChnID0gMCwgayA9ICcnKSk7XG4gICAgICAgICAgICAgICAgaWYgKDAgPCB0KSBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGRhLCBlYSk7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArICd7JyArIGsgKyAnfSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYucmVwbGFjZShmYSwgJyQxICQyJyk7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgayA9IDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKCdAJyArIGssIDMpID8gJ0Atd2Via2l0LScgKyBrICsgJ0AnICsgayA6ICdAJyArIGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBrID0gZiArIGssIDExMiA9PT0gaCAmJiAoayA9IChwICs9IGssICcnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGsgPSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIFgoYywgZiwgSSksIGssIGgsIGEgKyAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgRiArPSBrO1xuICAgICAgICAgICAgayA9IEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDEyNTpcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgZiA9ICgwIDwgciA/IGYucmVwbGFjZShOLCAnJykgOiBmKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoMSA8ICh0ID0gZi5sZW5ndGgpKSBzd2l0Y2ggKDAgPT09IHUgJiYgKHEgPSBmLmNoYXJDb2RlQXQoMCksIDQ1ID09PSBxIHx8IDk2IDwgcSAmJiAxMjMgPiBxKSAmJiAodCA9IChmID0gZi5yZXBsYWNlKCcgJywgJzonKSkubGVuZ3RoKSwgMCA8IEEgJiYgdm9pZCAwICE9PSAoQyA9IEgoMSwgZiwgYywgZCwgRCwgeiwgcC5sZW5ndGgsIGgsIGEsIGgpKSAmJiAwID09PSAodCA9IChmID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGYgPSAnXFx4MDBcXHgwMCcpLCBxID0gZi5jaGFyQ29kZUF0KDApLCBnID0gZi5jaGFyQ29kZUF0KDEpLCBxKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAgIGlmICgxMDUgPT09IGcgfHwgOTkgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgIEcgKz0gZiArIGUuY2hhckF0KGwpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgNTggIT09IGYuY2hhckNvZGVBdCh0IC0gMSkgJiYgKHAgKz0gUChmLCBxLCBnLCBmLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEkgPSByID0gdSA9IHEgPSAwO1xuICAgICAgICAgICAgZiA9ICcnO1xuICAgICAgICAgICAgZyA9IGUuY2hhckNvZGVBdCgrK2wpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIDQ3ID09PSBiID8gYiA9IDAgOiAwID09PSAxICsgcSAmJiAxMDcgIT09IGggJiYgMCA8IGYubGVuZ3RoICYmIChyID0gMSwgZiArPSAnXFx4MDAnKTtcbiAgICAgICAgICAwIDwgQSAqIFkgJiYgSCgwLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCk7XG4gICAgICAgICAgeiA9IDE7XG4gICAgICAgICAgRCsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGlmICgwID09PSBiICsgbiArIHYgKyBtKSB7XG4gICAgICAgICAgICB6Kys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB6Kys7XG4gICAgICAgICAgeSA9IGUuY2hhckF0KGwpO1xuXG4gICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICBpZiAoMCA9PT0gbiArIG0gKyBiKSBzd2l0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgICAgICB5ID0gJyc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAzMiAhPT0gZyAmJiAoeSA9ICcgJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcMCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFxmJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXHYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIChyID0gSSA9IDEsIHkgPSAnXFxmJyArIHkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0gKyBFICYmIDAgPCB1KSBzd2l0Y2ggKGwgLSB1KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgMTEyID09PSB4ICYmIDU4ID09PSBlLmNoYXJDb2RlQXQobCAtIDMpICYmIChFID0geCk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAxMTEgPT09IEsgJiYgKEUgPSBLKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmICh1ID0gbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICYmIChyID0gMSwgeSArPSAnXFxyJyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgMCA9PT0gYiAmJiAobiA9IG4gPT09IGcgPyAwIDogMCA9PT0gbiA/IGcgOiBuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDkzOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIHYgJiYgbS0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyBtICYmIHYtLTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgYiArIG0pIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcSkgc3dpdGNoICgyICogeCArIDMgKiBLKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDUzMzpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHEgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2Kys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgICAgMCA9PT0gYiArIHYgKyBuICsgbSArIHUgKyBrICYmIChrID0gMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgaWYgKCEoMCA8IG4gKyBtICsgdikpIHN3aXRjaCAoYikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoMiAqIGcgKyAzICogZS5jaGFyQ29kZUF0KGwgKyAxKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIzNTpcbiAgICAgICAgICAgICAgICAgICAgICBiID0gNDc7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICAgICAgICAgICAgdCA9IGwsIGIgPSA0MjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgICAgICAgNDcgPT09IGcgJiYgNDIgPT09IHggJiYgdCArIDIgIT09IGwgJiYgKDMzID09PSBlLmNoYXJDb2RlQXQodCArIDIpICYmIChwICs9IGUuc3Vic3RyaW5nKHQsIGwgKyAxKSksIHkgPSAnJywgYiA9IDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgMCA9PT0gYiAmJiAoZiArPSB5KTtcbiAgICAgIH1cblxuICAgICAgSyA9IHg7XG4gICAgICB4ID0gZztcbiAgICAgIGwrKztcbiAgICB9XG5cbiAgICB0ID0gcC5sZW5ndGg7XG5cbiAgICBpZiAoMCA8IHQpIHtcbiAgICAgIHIgPSBjO1xuICAgICAgaWYgKDAgPCBBICYmIChDID0gSCgyLCBwLCByLCBkLCBELCB6LCB0LCBoLCBhLCBoKSwgdm9pZCAwICE9PSBDICYmIDAgPT09IChwID0gQykubGVuZ3RoKSkgcmV0dXJuIEcgKyBwICsgRjtcbiAgICAgIHAgPSByLmpvaW4oJywnKSArICd7JyArIHAgKyAnfSc7XG5cbiAgICAgIGlmICgwICE9PSB3ICogRSkge1xuICAgICAgICAyICE9PSB3IHx8IEwocCwgMikgfHwgKEUgPSAwKTtcblxuICAgICAgICBzd2l0Y2ggKEUpIHtcbiAgICAgICAgICBjYXNlIDExMTpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoaGEsICc6LW1vei0kMScpICsgcDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICBwID0gcC5yZXBsYWNlKFEsICc6Oi13ZWJraXQtaW5wdXQtJDEnKSArIHAucmVwbGFjZShRLCAnOjotbW96LSQxJykgKyBwLnJlcGxhY2UoUSwgJzotbXMtaW5wdXQtJDEnKSArIHA7XG4gICAgICAgIH1cblxuICAgICAgICBFID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRyArIHAgKyBGO1xuICB9XG5cbiAgZnVuY3Rpb24gWChkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLnRyaW0oKS5zcGxpdChpYSk7XG4gICAgYyA9IGg7XG4gICAgdmFyIGEgPSBoLmxlbmd0aCxcbiAgICAgICAgbSA9IGQubGVuZ3RoO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHZhciBiID0gMDtcblxuICAgICAgICBmb3IgKGQgPSAwID09PSBtID8gJycgOiBkWzBdICsgJyAnOyBiIDwgYTsgKytiKSB7XG4gICAgICAgICAgY1tiXSA9IFooZCwgY1tiXSwgZSkudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciB2ID0gYiA9IDA7XG5cbiAgICAgICAgZm9yIChjID0gW107IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG07ICsrbikge1xuICAgICAgICAgICAgY1t2KytdID0gWihkW25dICsgJyAnLCBoW2JdLCBlKS50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFooZCwgYywgZSkge1xuICAgIHZhciBoID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIDMzID4gaCAmJiAoaCA9IChjID0gYy50cmltKCkpLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgc3dpdGNoIChoKSB7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICByZXR1cm4gYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGNhc2UgNTg6XG4gICAgICAgIHJldHVybiBkLnRyaW0oKSArIGMucmVwbGFjZShGLCAnJDEnICsgZC50cmltKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoMCA8IDEgKiBlICYmIDAgPCBjLmluZGV4T2YoJ1xcZicpKSByZXR1cm4gYy5yZXBsYWNlKEYsICg1OCA9PT0gZC5jaGFyQ29kZUF0KDApID8gJycgOiAnJDEnKSArIGQudHJpbSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZCArIGM7XG4gIH1cblxuICBmdW5jdGlvbiBQKGQsIGMsIGUsIGgpIHtcbiAgICB2YXIgYSA9IGQgKyAnOycsXG4gICAgICAgIG0gPSAyICogYyArIDMgKiBlICsgNCAqIGg7XG5cbiAgICBpZiAoOTQ0ID09PSBtKSB7XG4gICAgICBkID0gYS5pbmRleE9mKCc6JywgOSkgKyAxO1xuICAgICAgdmFyIGIgPSBhLnN1YnN0cmluZyhkLCBhLmxlbmd0aCAtIDEpLnRyaW0oKTtcbiAgICAgIGIgPSBhLnN1YnN0cmluZygwLCBkKS50cmltKCkgKyBiICsgJzsnO1xuICAgICAgcmV0dXJuIDEgPT09IHcgfHwgMiA9PT0gdyAmJiBMKGIsIDEpID8gJy13ZWJraXQtJyArIGIgKyBiIDogYjtcbiAgICB9XG5cbiAgICBpZiAoMCA9PT0gdyB8fCAyID09PSB3ICYmICFMKGEsIDEpKSByZXR1cm4gYTtcblxuICAgIHN3aXRjaCAobSkge1xuICAgICAgY2FzZSAxMDE1OlxuICAgICAgICByZXR1cm4gOTcgPT09IGEuY2hhckNvZGVBdCgxMCkgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk1MTpcbiAgICAgICAgcmV0dXJuIDExNiA9PT0gYS5jaGFyQ29kZUF0KDMpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSA5NjM6XG4gICAgICAgIHJldHVybiAxMTAgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgMTAwOTpcbiAgICAgICAgaWYgKDEwMCAhPT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5Njk6XG4gICAgICBjYXNlIDk0MjpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5Nzg6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgYTtcblxuICAgICAgY2FzZSAxMDE5OlxuICAgICAgY2FzZSA5ODM6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbW96LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgODgzOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg4KSkgcmV0dXJuICctd2Via2l0LScgKyBhICsgYTtcbiAgICAgICAgaWYgKDAgPCBhLmluZGV4T2YoJ2ltYWdlLXNldCgnLCAxMSkpIHJldHVybiBhLnJlcGxhY2UoamEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDkzMjpcbiAgICAgICAgaWYgKDQ1ID09PSBhLmNoYXJDb2RlQXQoNCkpIHN3aXRjaCAoYS5jaGFyQ29kZUF0KDUpKSB7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtYm94LScgKyBhLnJlcGxhY2UoJy1ncm93JywgJycpICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhLnJlcGxhY2UoJ2dyb3cnLCAncG9zaXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyBhO1xuXG4gICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgOTY0OlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMjM6XG4gICAgICAgIGlmICg5OSAhPT0gYS5jaGFyQ29kZUF0KDgpKSBicmVhaztcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKGEuaW5kZXhPZignOicsIDE1KSkucmVwbGFjZSgnZmxleC0nLCAnJykucmVwbGFjZSgnc3BhY2UtYmV0d2VlbicsICdqdXN0aWZ5Jyk7XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtcGFjaycgKyBiICsgJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtcGFjaycgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDA1OlxuICAgICAgICByZXR1cm4ga2EudGVzdChhKSA/IGEucmVwbGFjZShhYSwgJzotd2Via2l0LScpICsgYS5yZXBsYWNlKGFhLCAnOi1tb3otJykgKyBhIDogYTtcblxuICAgICAgY2FzZSAxZTM6XG4gICAgICAgIGIgPSBhLnN1YnN0cmluZygxMykudHJpbSgpO1xuICAgICAgICBjID0gYi5pbmRleE9mKCctJykgKyAxO1xuXG4gICAgICAgIHN3aXRjaCAoYi5jaGFyQ29kZUF0KDApICsgYi5jaGFyQ29kZUF0KGMpKSB7XG4gICAgICAgICAgY2FzZSAyMjY6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICd0YicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIzMjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiLXJsJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjIwOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAnbHInKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYiArIGE7XG5cbiAgICAgIGNhc2UgMTAxNzpcbiAgICAgICAgaWYgKC0xID09PSBhLmluZGV4T2YoJ3N0aWNreScsIDkpKSBicmVhaztcblxuICAgICAgY2FzZSA5NzU6XG4gICAgICAgIGMgPSAoYSA9IGQpLmxlbmd0aCAtIDEwO1xuICAgICAgICBiID0gKDMzID09PSBhLmNoYXJDb2RlQXQoYykgPyBhLnN1YnN0cmluZygwLCBjKSA6IGEpLnN1YnN0cmluZyhkLmluZGV4T2YoJzonLCA3KSArIDEpLnRyaW0oKTtcblxuICAgICAgICBzd2l0Y2ggKG0gPSBiLmNoYXJDb2RlQXQoMCkgKyAoYi5jaGFyQ29kZUF0KDcpIHwgMCkpIHtcbiAgICAgICAgICBjYXNlIDIwMzpcbiAgICAgICAgICAgIGlmICgxMTEgPiBiLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyBiKSArICc7JyArIGE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjA3OlxuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgYSA9IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgKDEwMiA8IG0gPyAnaW5saW5lLScgOiAnJykgKyAnYm94JykgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYS5yZXBsYWNlKGIsICctbXMtJyArIGIgKyAnYm94JykgKyAnOycgKyBhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGEgKyAnOyc7XG5cbiAgICAgIGNhc2UgOTM4OlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg1KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNikpIHtcbiAgICAgICAgICBjYXNlIDEwNTpcbiAgICAgICAgICAgIHJldHVybiBiID0gYS5yZXBsYWNlKCctaXRlbXMnLCAnJyksICctd2Via2l0LScgKyBhICsgJy13ZWJraXQtYm94LScgKyBiICsgJy1tcy1mbGV4LScgKyBiICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy1mbGV4LWl0ZW0tJyArIGEucmVwbGFjZShiYSwgJycpICsgYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtbGluZS1wYWNrJyArIGEucmVwbGFjZSgnYWxpZ24tY29udGVudCcsICcnKS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3MzpcbiAgICAgIGNhc2UgOTg5OlxuICAgICAgICBpZiAoNDUgIT09IGEuY2hhckNvZGVBdCgzKSB8fCAxMjIgPT09IGEuY2hhckNvZGVBdCg0KSkgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMxOlxuICAgICAgY2FzZSA5NTM6XG4gICAgICAgIGlmICghMCA9PT0gbGEudGVzdChkKSkgcmV0dXJuIDExNSA9PT0gKGIgPSBkLnN1YnN0cmluZyhkLmluZGV4T2YoJzonKSArIDEpKS5jaGFyQ29kZUF0KDApID8gUChkLnJlcGxhY2UoJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgYywgZSwgaCkucmVwbGFjZSgnOmZpbGwtYXZhaWxhYmxlJywgJzpzdHJldGNoJykgOiBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgYS5yZXBsYWNlKGIsICctbW96LScgKyBiLnJlcGxhY2UoJ2ZpbGwtJywgJycpKSArIGE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2MjpcbiAgICAgICAgaWYgKGEgPSAnLXdlYmtpdC0nICsgYSArICgxMDIgPT09IGEuY2hhckNvZGVBdCg1KSA/ICctbXMtJyArIGEgOiAnJykgKyBhLCAyMTEgPT09IGUgKyBoICYmIDEwNSA9PT0gYS5jaGFyQ29kZUF0KDEzKSAmJiAwIDwgYS5pbmRleE9mKCd0cmFuc2Zvcm0nLCAxMCkpIHJldHVybiBhLnN1YnN0cmluZygwLCBhLmluZGV4T2YoJzsnLCAyNykgKyAxKS5yZXBsYWNlKG1hLCAnJDEtd2Via2l0LSQyJykgKyBhO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gTChkLCBjKSB7XG4gICAgdmFyIGUgPSBkLmluZGV4T2YoMSA9PT0gYyA/ICc6JyA6ICd7JyksXG4gICAgICAgIGggPSBkLnN1YnN0cmluZygwLCAzICE9PSBjID8gZSA6IDEwKTtcbiAgICBlID0gZC5zdWJzdHJpbmcoZSArIDEsIGQubGVuZ3RoIC0gMSk7XG4gICAgcmV0dXJuIFIoMiAhPT0gYyA/IGggOiBoLnJlcGxhY2UobmEsICckMScpLCBlLCBjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVhKGQsIGMpIHtcbiAgICB2YXIgZSA9IFAoYywgYy5jaGFyQ29kZUF0KDApLCBjLmNoYXJDb2RlQXQoMSksIGMuY2hhckNvZGVBdCgyKSk7XG4gICAgcmV0dXJuIGUgIT09IGMgKyAnOycgPyBlLnJlcGxhY2Uob2EsICcgb3IgKCQxKScpLnN1YnN0cmluZyg0KSA6ICcoJyArIGMgKyAnKSc7XG4gIH1cblxuICBmdW5jdGlvbiBIKGQsIGMsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpIHtcbiAgICBmb3IgKHZhciBnID0gMCwgeCA9IGMsIHc7IGcgPCBBOyArK2cpIHtcbiAgICAgIHN3aXRjaCAodyA9IFNbZ10uY2FsbChCLCBkLCB4LCBlLCBoLCBhLCBtLCBiLCB2LCBuLCBxKSkge1xuICAgICAgICBjYXNlIHZvaWQgMDpcbiAgICAgICAgY2FzZSAhMTpcbiAgICAgICAgY2FzZSAhMDpcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgeCA9IHc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHggIT09IGMpIHJldHVybiB4O1xuICB9XG5cbiAgZnVuY3Rpb24gVChkKSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgICBjYXNlIHZvaWQgMDpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgQSA9IFMubGVuZ3RoID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZCkgU1tBKytdID0gZDtlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIGQpIGZvciAodmFyIGMgPSAwLCBlID0gZC5sZW5ndGg7IGMgPCBlOyArK2MpIHtcbiAgICAgICAgICBUKGRbY10pO1xuICAgICAgICB9IGVsc2UgWSA9ICEhZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFQ7XG4gIH1cblxuICBmdW5jdGlvbiBVKGQpIHtcbiAgICBkID0gZC5wcmVmaXg7XG4gICAgdm9pZCAwICE9PSBkICYmIChSID0gbnVsbCwgZCA/ICdmdW5jdGlvbicgIT09IHR5cGVvZiBkID8gdyA9IDEgOiAodyA9IDIsIFIgPSBkKSA6IHcgPSAwKTtcbiAgICByZXR1cm4gVTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEIoZCwgYykge1xuICAgIHZhciBlID0gZDtcbiAgICAzMyA+IGUuY2hhckNvZGVBdCgwKSAmJiAoZSA9IGUudHJpbSgpKTtcbiAgICBWID0gZTtcbiAgICBlID0gW1ZdO1xuXG4gICAgaWYgKDAgPCBBKSB7XG4gICAgICB2YXIgaCA9IEgoLTEsIGMsIGUsIGUsIEQsIHosIDAsIDAsIDAsIDApO1xuICAgICAgdm9pZCAwICE9PSBoICYmICdzdHJpbmcnID09PSB0eXBlb2YgaCAmJiAoYyA9IGgpO1xuICAgIH1cblxuICAgIHZhciBhID0gTShPLCBlLCBjLCAwLCAwKTtcbiAgICAwIDwgQSAmJiAoaCA9IEgoLTIsIGEsIGUsIGUsIEQsIHosIGEubGVuZ3RoLCAwLCAwLCAwKSwgdm9pZCAwICE9PSBoICYmIChhID0gaCkpO1xuICAgIFYgPSAnJztcbiAgICBFID0gMDtcbiAgICB6ID0gRCA9IDE7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgY2EgPSAvXlxcMCsvZyxcbiAgICAgIE4gPSAvW1xcMFxcclxcZl0vZyxcbiAgICAgIGFhID0gLzogKi9nLFxuICAgICAga2EgPSAvem9vfGdyYS8sXG4gICAgICBtYSA9IC8oWyw6IF0pKHRyYW5zZm9ybSkvZyxcbiAgICAgIGlhID0gLyxcXHIrPy9nLFxuICAgICAgRiA9IC8oW1xcdFxcclxcbiBdKSpcXGY/Ji9nLFxuICAgICAgZmEgPSAvQChrXFx3KylcXHMqKFxcUyopXFxzKi8sXG4gICAgICBRID0gLzo6KHBsYWNlKS9nLFxuICAgICAgaGEgPSAvOihyZWFkLW9ubHkpL2csXG4gICAgICBHID0gL1tzdmhdXFx3Ky1bdGJscl17Mn0vLFxuICAgICAgZGEgPSAvXFwoXFxzKiguKilcXHMqXFwpL2csXG4gICAgICBvYSA9IC8oW1xcc1xcU10qPyk7L2csXG4gICAgICBiYSA9IC8tc2VsZnxmbGV4LS9nLFxuICAgICAgbmEgPSAvW15dKj8oOltycF1bZWxdYVtcXHctXSspW15dKi8sXG4gICAgICBsYSA9IC9zdHJldGNofDpcXHMqXFx3K1xcLSg/OmNvbnRlfGF2YWlsKS8sXG4gICAgICBqYSA9IC8oW14tXSkoaW1hZ2Utc2V0XFwoKS8sXG4gICAgICB6ID0gMSxcbiAgICAgIEQgPSAxLFxuICAgICAgRSA9IDAsXG4gICAgICB3ID0gMSxcbiAgICAgIE8gPSBbXSxcbiAgICAgIFMgPSBbXSxcbiAgICAgIEEgPSAwLFxuICAgICAgUiA9IG51bGwsXG4gICAgICBZID0gMCxcbiAgICAgIFYgPSAnJztcbiAgQi51c2UgPSBUO1xuICBCLnNldCA9IFU7XG4gIHZvaWQgMCAhPT0gVyAmJiBVKFcpO1xuICByZXR1cm4gQjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGlzX21pbjtcbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bml0bGVzc0tleXM7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViZmVlNjhhNGNkN2U2MDA5ZWY2MWQyM1xuXG52YXIgaW5kZXggPSBtZW1vaXplKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHJldHVybiByZWFjdFByb3BzUmVnZXgudGVzdChwcm9wKSB8fCBwcm9wLmNoYXJDb2RlQXQoMCkgPT09IDExMVxuICAvKiBvICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgxKSA9PT0gMTEwXG4gIC8qIG4gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDIpIDwgOTE7XG59XG4vKiBaKzEgKi9cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGluZGV4O1xuIiwiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiIsImltcG9ydHt0eXBlT2YgYXMgZSxpc0VsZW1lbnQgYXMgdCxpc1ZhbGlkRWxlbWVudFR5cGUgYXMgbn1mcm9tXCJyZWFjdC1pc1wiO2ltcG9ydCByLHt1c2VTdGF0ZSBhcyBvLHVzZUNvbnRleHQgYXMgcyx1c2VNZW1vIGFzIGksdXNlRWZmZWN0IGFzIGEsdXNlUmVmIGFzIGMsY3JlYXRlRWxlbWVudCBhcyB1LHVzZURlYnVnVmFsdWUgYXMgbCx1c2VMYXlvdXRFZmZlY3QgYXMgZH1mcm9tXCJyZWFjdFwiO2ltcG9ydCBoIGZyb21cInNoYWxsb3dlcXVhbFwiO2ltcG9ydCBwIGZyb21cIkBlbW90aW9uL3N0eWxpc1wiO2ltcG9ydCBmIGZyb21cIkBlbW90aW9uL3VuaXRsZXNzXCI7aW1wb3J0IG0gZnJvbVwiQGVtb3Rpb24vaXMtcHJvcC12YWxpZFwiO2ltcG9ydCB5IGZyb21cImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI7ZnVuY3Rpb24gdigpe3JldHVybih2PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGc9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W2VbMF1dLHI9MCxvPXQubGVuZ3RoO3I8bztyKz0xKW4ucHVzaCh0W3JdLGVbcisxXSk7cmV0dXJuIG59LFM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJbb2JqZWN0IE9iamVjdF1cIj09PSh0LnRvU3RyaW5nP3QudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpJiYhZSh0KX0sdz1PYmplY3QuZnJlZXplKFtdKSxFPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIGIoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiBfKGUpe3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwic3RyaW5nXCI9PXR5cGVvZiBlJiZlfHxlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fFwiQ29tcG9uZW50XCJ9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUuc3R5bGVkQ29tcG9uZW50SWR9dmFyIEE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfQVRUUnx8cHJvY2Vzcy5lbnYuU0NfQVRUUil8fFwiZGF0YS1zdHlsZWRcIixDPVwiNS4zLjNcIixJPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwiSFRNTEVsZW1lbnRcImluIHdpbmRvdyxQPUJvb2xlYW4oXCJib29sZWFuXCI9PXR5cGVvZiBTQ19ESVNBQkxFX1NQRUVEWT9TQ19ESVNBQkxFX1NQRUVEWTpcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmdm9pZCAwIT09cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0RJU0FCTEVfU1BFRURZJiZcIlwiIT09cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0RJU0FCTEVfU1BFRURZP1wiZmFsc2VcIiE9PXByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWSYmcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0RJU0FCTEVfU1BFRURZOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiZ2b2lkIDAhPT1wcm9jZXNzLmVudi5TQ19ESVNBQkxFX1NQRUVEWSYmXCJcIiE9PXByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZP1wiZmFsc2VcIiE9PXByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZJiZwcm9jZXNzLmVudi5TQ19ESVNBQkxFX1NQRUVEWTpcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WKSxPPXt9LFI9XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOVj97MTpcIkNhbm5vdCBjcmVhdGUgc3R5bGVkLWNvbXBvbmVudCBmb3IgY29tcG9uZW50OiAlcy5cXG5cXG5cIiwyOlwiQ2FuJ3QgY29sbGVjdCBzdHlsZXMgb25jZSB5b3UndmUgY29uc3VtZWQgYSBgU2VydmVyU3R5bGVTaGVldGAncyBzdHlsZXMhIGBTZXJ2ZXJTdHlsZVNoZWV0YCBpcyBhIG9uZSBvZmYgaW5zdGFuY2UgZm9yIGVhY2ggc2VydmVyLXNpZGUgcmVuZGVyIGN5Y2xlLlxcblxcbi0gQXJlIHlvdSB0cnlpbmcgdG8gcmV1c2UgaXQgYWNyb3NzIHJlbmRlcnM/XFxuLSBBcmUgeW91IGFjY2lkZW50YWxseSBjYWxsaW5nIGNvbGxlY3RTdHlsZXMgdHdpY2U/XFxuXFxuXCIsMzpcIlN0cmVhbWluZyBTU1IgaXMgb25seSBzdXBwb3J0ZWQgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50OyBQbGVhc2UgZG8gbm90IHRyeSB0byBjYWxsIHRoaXMgbWV0aG9kIGluIHRoZSBicm93c2VyLlxcblxcblwiLDQ6XCJUaGUgYFN0eWxlU2hlZXRNYW5hZ2VyYCBleHBlY3RzIGEgdmFsaWQgdGFyZ2V0IG9yIHNoZWV0IHByb3AhXFxuXFxuLSBEb2VzIHRoaXMgZXJyb3Igb2NjdXIgb24gdGhlIGNsaWVudCBhbmQgaXMgeW91ciB0YXJnZXQgZmFsc3k/XFxuLSBEb2VzIHRoaXMgZXJyb3Igb2NjdXIgb24gdGhlIHNlcnZlciBhbmQgaXMgdGhlIHNoZWV0IGZhbHN5P1xcblxcblwiLDU6XCJUaGUgY2xvbmUgbWV0aG9kIGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBjbGllbnQhXFxuXFxuLSBBcmUgeW91IHJ1bm5pbmcgaW4gYSBjbGllbnQtbGlrZSBlbnZpcm9ubWVudCBvbiB0aGUgc2VydmVyP1xcbi0gQXJlIHlvdSB0cnlpbmcgdG8gcnVuIFNTUiBvbiB0aGUgY2xpZW50P1xcblxcblwiLDY6XCJUcnlpbmcgdG8gaW5zZXJ0IGEgbmV3IHN0eWxlIHRhZywgYnV0IHRoZSBnaXZlbiBOb2RlIGlzIHVubW91bnRlZCFcXG5cXG4tIEFyZSB5b3UgdXNpbmcgYSBjdXN0b20gdGFyZ2V0IHRoYXQgaXNuJ3QgbW91bnRlZD9cXG4tIERvZXMgeW91ciBkb2N1bWVudCBub3QgaGF2ZSBhIHZhbGlkIGhlYWQgZWxlbWVudD9cXG4tIEhhdmUgeW91IGFjY2lkZW50YWxseSByZW1vdmVkIGEgc3R5bGUgdGFnIG1hbnVhbGx5P1xcblxcblwiLDc6J1RoZW1lUHJvdmlkZXI6IFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciBcInRoZW1lXCIgcHJvcCBmdW5jdGlvbiwgZS5nLlxcblxcbmBgYGpzXFxudGhlbWU9eygpID0+ICh7fSl9XFxuYGBgXFxuXFxuJyw4OidUaGVtZVByb3ZpZGVyOiBQbGVhc2UgbWFrZSB5b3VyIFwidGhlbWVcIiBwcm9wIGFuIG9iamVjdC5cXG5cXG4nLDk6XCJNaXNzaW5nIGRvY3VtZW50IGA8aGVhZD5gXFxuXFxuXCIsMTA6XCJDYW5ub3QgZmluZCBhIFN0eWxlU2hlZXQgaW5zdGFuY2UuIFVzdWFsbHkgdGhpcyBoYXBwZW5zIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb3BpZXMgb2Ygc3R5bGVkLWNvbXBvbmVudHMgbG9hZGVkIGF0IG9uY2UuIENoZWNrIG91dCB0aGlzIGlzc3VlIGZvciBob3cgdG8gdHJvdWJsZXNob290IGFuZCBmaXggdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSB0aGlzIHNpdHVhdGlvbiBjYW4gaGFwcGVuOiBodHRwczovL2dpdGh1Yi5jb20vc3R5bGVkLWNvbXBvbmVudHMvc3R5bGVkLWNvbXBvbmVudHMvaXNzdWVzLzE5NDEjaXNzdWVjb21tZW50LTQxNzg2MjAyMVxcblxcblwiLDExOlwiX1RoaXMgZXJyb3Igd2FzIHJlcGxhY2VkIHdpdGggYSBkZXYtdGltZSB3YXJuaW5nLCBpdCB3aWxsIGJlIGRlbGV0ZWQgZm9yIHY0IGZpbmFsLl8gW2NyZWF0ZUdsb2JhbFN0eWxlXSByZWNlaXZlZCBjaGlsZHJlbiB3aGljaCB3aWxsIG5vdCBiZSByZW5kZXJlZC4gUGxlYXNlIHVzZSB0aGUgY29tcG9uZW50IHdpdGhvdXQgcGFzc2luZyBjaGlsZHJlbiBlbGVtZW50cy5cXG5cXG5cIiwxMjpcIkl0IHNlZW1zIHlvdSBhcmUgaW50ZXJwb2xhdGluZyBhIGtleWZyYW1lIGRlY2xhcmF0aW9uICglcykgaW50byBhbiB1bnRhZ2dlZCBzdHJpbmcuIFRoaXMgd2FzIHN1cHBvcnRlZCBpbiBzdHlsZWQtY29tcG9uZW50cyB2MywgYnV0IGlzIG5vdCBsb25nZXIgc3VwcG9ydGVkIGluIHY0IGFzIGtleWZyYW1lcyBhcmUgbm93IGluamVjdGVkIG9uLWRlbWFuZC4gUGxlYXNlIHdyYXAgeW91ciBzdHJpbmcgaW4gdGhlIGNzc1xcXFxgXFxcXGAgaGVscGVyIHdoaWNoIGVuc3VyZXMgdGhlIHN0eWxlcyBhcmUgaW5qZWN0ZWQgY29ycmVjdGx5LiBTZWUgaHR0cHM6Ly93d3cuc3R5bGVkLWNvbXBvbmVudHMuY29tL2RvY3MvYXBpI2Nzc1xcblxcblwiLDEzOlwiJXMgaXMgbm90IGEgc3R5bGVkIGNvbXBvbmVudCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvIHZpYSBjb21wb25lbnQgc2VsZWN0b3IuIFNlZSBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9hZHZhbmNlZCNyZWZlcnJpbmctdG8tb3RoZXItY29tcG9uZW50cyBmb3IgbW9yZSBkZXRhaWxzLlxcblxcblwiLDE0OidUaGVtZVByb3ZpZGVyOiBcInRoZW1lXCIgcHJvcCBpcyByZXF1aXJlZC5cXG5cXG4nLDE1OlwiQSBzdHlsaXMgcGx1Z2luIGhhcyBiZWVuIHN1cHBsaWVkIHRoYXQgaXMgbm90IG5hbWVkLiBXZSBuZWVkIGEgbmFtZSBmb3IgZWFjaCBwbHVnaW4gdG8gYmUgYWJsZSB0byBwcmV2ZW50IHN0eWxpbmcgY29sbGlzaW9ucyBiZXR3ZWVuIGRpZmZlcmVudCBzdHlsaXMgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBzYW1lIGFwcC4gQmVmb3JlIHlvdSBwYXNzIHlvdXIgcGx1Z2luIHRvIGA8U3R5bGVTaGVldE1hbmFnZXIgc3R5bGlzUGx1Z2lucz17W119PmAsIHBsZWFzZSBtYWtlIHN1cmUgZWFjaCBwbHVnaW4gaXMgdW5pcXVlbHktbmFtZWQsIGUuZy5cXG5cXG5gYGBqc1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbXBvcnRlZFBsdWdpbiwgJ25hbWUnLCB7IHZhbHVlOiAnc29tZS11bmlxdWUtbmFtZScgfSk7XFxuYGBgXFxuXFxuXCIsMTY6XCJSZWFjaGVkIHRoZSBsaW1pdCBvZiBob3cgbWFueSBzdHlsZWQgY29tcG9uZW50cyBtYXkgYmUgY3JlYXRlZCBhdCBncm91cCAlcy5cXG5Zb3UgbWF5IG9ubHkgY3JlYXRlIHVwIHRvIDEsMDczLDc0MSw4MjQgY29tcG9uZW50cy4gSWYgeW91J3JlIGNyZWF0aW5nIGNvbXBvbmVudHMgZHluYW1pY2FsbHksXFxuYXMgZm9yIGluc3RhbmNlIGluIHlvdXIgcmVuZGVyIG1ldGhvZCB0aGVuIHlvdSBtYXkgYmUgcnVubmluZyBpbnRvIHRoaXMgbGltaXRhdGlvbi5cXG5cXG5cIiwxNzpcIkNTU1N0eWxlU2hlZXQgY291bGQgbm90IGJlIGZvdW5kIG9uIEhUTUxTdHlsZUVsZW1lbnQuXFxuSGFzIHN0eWxlZC1jb21wb25lbnRzJyBzdHlsZSB0YWcgYmVlbiB1bm1vdW50ZWQgb3IgYWx0ZXJlZCBieSBhbm90aGVyIHNjcmlwdD9cXG5cIn06e307ZnVuY3Rpb24gRCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoPD0wP3ZvaWQgMDphcmd1bWVudHNbMF0sdD1bXSxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKz0xKXQucHVzaChuPDB8fGFyZ3VtZW50cy5sZW5ndGg8PW4/dm9pZCAwOmFyZ3VtZW50c1tuXSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZT1lLnJlcGxhY2UoLyVbYS16XS8sdCl9KSksZX1mdW5jdGlvbiBqKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aHJvd1wicHJvZHVjdGlvblwiPT09cHJvY2Vzcy5lbnYuTk9ERV9FTlY/bmV3IEVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQuIFNlZSBodHRwczovL2dpdC5pby9KVUlhRSNcIitlK1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiKyhuLmxlbmd0aD4wP1wiIEFyZ3M6IFwiK24uam9pbihcIiwgXCIpOlwiXCIpKTpuZXcgRXJyb3IoRC5hcHBseSh2b2lkIDAsW1JbZV1dLmNvbmNhdChuKSkudHJpbSgpKX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5ncm91cFNpemVzPW5ldyBVaW50MzJBcnJheSg1MTIpLHRoaXMubGVuZ3RoPTUxMix0aGlzLnRhZz1lfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmluZGV4T2ZHcm91cD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlO24rKyl0Kz10aGlzLmdyb3VwU2l6ZXNbbl07cmV0dXJuIHR9LHQuaW5zZXJ0UnVsZXM9ZnVuY3Rpb24oZSx0KXtpZihlPj10aGlzLmdyb3VwU2l6ZXMubGVuZ3RoKXtmb3IodmFyIG49dGhpcy5ncm91cFNpemVzLHI9bi5sZW5ndGgsbz1yO2U+PW87KShvPDw9MSk8MCYmaigxNixcIlwiK2UpO3RoaXMuZ3JvdXBTaXplcz1uZXcgVWludDMyQXJyYXkobyksdGhpcy5ncm91cFNpemVzLnNldChuKSx0aGlzLmxlbmd0aD1vO2Zvcih2YXIgcz1yO3M8bztzKyspdGhpcy5ncm91cFNpemVzW3NdPTB9Zm9yKHZhciBpPXRoaXMuaW5kZXhPZkdyb3VwKGUrMSksYT0wLGM9dC5sZW5ndGg7YTxjO2ErKyl0aGlzLnRhZy5pbnNlcnRSdWxlKGksdFthXSkmJih0aGlzLmdyb3VwU2l6ZXNbZV0rKyxpKyspfSx0LmNsZWFyR3JvdXA9ZnVuY3Rpb24oZSl7aWYoZTx0aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5ncm91cFNpemVzW2VdLG49dGhpcy5pbmRleE9mR3JvdXAoZSkscj1uK3Q7dGhpcy5ncm91cFNpemVzW2VdPTA7Zm9yKHZhciBvPW47bzxyO28rKyl0aGlzLnRhZy5kZWxldGVSdWxlKG4pfX0sdC5nZXRHcm91cD1mdW5jdGlvbihlKXt2YXIgdD1cIlwiO2lmKGU+PXRoaXMubGVuZ3RofHwwPT09dGhpcy5ncm91cFNpemVzW2VdKXJldHVybiB0O2Zvcih2YXIgbj10aGlzLmdyb3VwU2l6ZXNbZV0scj10aGlzLmluZGV4T2ZHcm91cChlKSxvPXIrbixzPXI7czxvO3MrKyl0Kz10aGlzLnRhZy5nZXRSdWxlKHMpK1wiLyohc2MqL1xcblwiO3JldHVybiB0fSxlfSgpLHg9bmV3IE1hcCxrPW5ldyBNYXAsVj0xLEI9ZnVuY3Rpb24oZSl7aWYoeC5oYXMoZSkpcmV0dXJuIHguZ2V0KGUpO2Zvcig7ay5oYXMoVik7KVYrKzt2YXIgdD1WKys7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmKCgwfHQpPDB8fHQ+MTw8MzApJiZqKDE2LFwiXCIrdCkseC5zZXQoZSx0KSxrLnNldCh0LGUpLHR9LHo9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuZ2V0KGUpfSxNPWZ1bmN0aW9uKGUsdCl7dD49ViYmKFY9dCsxKSx4LnNldChlLHQpLGsuc2V0KHQsZSl9LEc9XCJzdHlsZVtcIitBKyddW2RhdGEtc3R5bGVkLXZlcnNpb249XCI1LjMuM1wiXScsTD1uZXcgUmVnRXhwKFwiXlwiK0ErJ1xcXFwuZyhcXFxcZCspXFxcXFtpZD1cIihbXFxcXHdcXFxcZC1dKylcIlxcXFxdLio/XCIoW15cIl0qKScpLEY9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixvPW4uc3BsaXQoXCIsXCIpLHM9MCxpPW8ubGVuZ3RoO3M8aTtzKyspKHI9b1tzXSkmJmUucmVnaXN0ZXJOYW1lKHQscil9LFk9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49KHQudGV4dENvbnRlbnR8fFwiXCIpLnNwbGl0KFwiLyohc2MqL1xcblwiKSxyPVtdLG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBpPW5bb10udHJpbSgpO2lmKGkpe3ZhciBhPWkubWF0Y2goTCk7aWYoYSl7dmFyIGM9MHxwYXJzZUludChhWzFdLDEwKSx1PWFbMl07MCE9PWMmJihNKHUsYyksRihlLHUsYVszXSksZS5nZXRUYWcoKS5pbnNlcnRSdWxlcyhjLHIpKSxyLmxlbmd0aD0wfWVsc2Ugci5wdXNoKGkpfX19LHE9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuX193ZWJwYWNrX25vbmNlX18/d2luZG93Ll9fd2VicGFja19ub25jZV9fOm51bGx9LEg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuaGVhZCxuPWV8fHQscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksbz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGlsZE5vZGVzLG49dC5sZW5ndGg7bj49MDtuLS0pe3ZhciByPXRbbl07aWYociYmMT09PXIubm9kZVR5cGUmJnIuaGFzQXR0cmlidXRlKEEpKXJldHVybiByfX0obikscz12b2lkIDAhPT1vP28ubmV4dFNpYmxpbmc6bnVsbDtyLnNldEF0dHJpYnV0ZShBLFwiYWN0aXZlXCIpLHIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZWQtdmVyc2lvblwiLFwiNS4zLjNcIik7dmFyIGk9cSgpO3JldHVybiBpJiZyLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsaSksbi5pbnNlcnRCZWZvcmUocixzKSxyfSwkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzLmVsZW1lbnQ9SChlKTt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKSx0aGlzLnNoZWV0PWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWRvY3VtZW50LnN0eWxlU2hlZXRzLG49MCxyPXQubGVuZ3RoO248cjtuKyspe3ZhciBvPXRbbl07aWYoby5vd25lck5vZGU9PT1lKXJldHVybiBvfWooMTcpfSh0KSx0aGlzLmxlbmd0aD0wfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0Lmluc2VydFJ1bGU9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIHRoaXMuc2hlZXQuaW5zZXJ0UnVsZSh0LGUpLHRoaXMubGVuZ3RoKyssITB9Y2F0Y2goZSl7cmV0dXJuITF9fSx0LmRlbGV0ZVJ1bGU9ZnVuY3Rpb24oZSl7dGhpcy5zaGVldC5kZWxldGVSdWxlKGUpLHRoaXMubGVuZ3RoLS19LHQuZ2V0UnVsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNoZWV0LmNzc1J1bGVzW2VdO3JldHVybiB2b2lkIDAhPT10JiZcInN0cmluZ1wiPT10eXBlb2YgdC5jc3NUZXh0P3QuY3NzVGV4dDpcIlwifSxlfSgpLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXMuZWxlbWVudD1IKGUpO3RoaXMubm9kZXM9dC5jaGlsZE5vZGVzLHRoaXMubGVuZ3RoPTB9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5zZXJ0UnVsZT1mdW5jdGlvbihlLHQpe2lmKGU8PXRoaXMubGVuZ3RoJiZlPj0wKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSxyPXRoaXMubm9kZXNbZV07cmV0dXJuIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobixyfHxudWxsKSx0aGlzLmxlbmd0aCsrLCEwfXJldHVybiExfSx0LmRlbGV0ZVJ1bGU9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubm9kZXNbZV0pLHRoaXMubGVuZ3RoLS19LHQuZ2V0UnVsZT1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmxlbmd0aD90aGlzLm5vZGVzW2VdLnRleHRDb250ZW50OlwiXCJ9LGV9KCksVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5ydWxlcz1bXSx0aGlzLmxlbmd0aD0wfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0Lmluc2VydFJ1bGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dGhpcy5sZW5ndGgmJih0aGlzLnJ1bGVzLnNwbGljZShlLDAsdCksdGhpcy5sZW5ndGgrKywhMCl9LHQuZGVsZXRlUnVsZT1mdW5jdGlvbihlKXt0aGlzLnJ1bGVzLnNwbGljZShlLDEpLHRoaXMubGVuZ3RoLS19LHQuZ2V0UnVsZT1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmxlbmd0aD90aGlzLnJ1bGVzW2VdOlwiXCJ9LGV9KCksSj1JLFg9e2lzU2VydmVyOiFJLHVzZUNTU09NSW5qZWN0aW9uOiFQfSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09ZSYmKGU9RSksdm9pZCAwPT09dCYmKHQ9e30pLHRoaXMub3B0aW9ucz12KHt9LFgse30sZSksdGhpcy5ncz10LHRoaXMubmFtZXM9bmV3IE1hcChuKSx0aGlzLnNlcnZlcj0hIWUuaXNTZXJ2ZXIsIXRoaXMuc2VydmVyJiZJJiZKJiYoSj0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChHKSxuPTAscj10Lmxlbmd0aDtuPHI7bisrKXt2YXIgbz10W25dO28mJlwiYWN0aXZlXCIhPT1vLmdldEF0dHJpYnV0ZShBKSYmKFkoZSxvKSxvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSl9fSh0aGlzKSl9ZS5yZWdpc3RlcklkPWZ1bmN0aW9uKGUpe3JldHVybiBCKGUpfTt2YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5yZWNvbnN0cnVjdFdpdGhPcHRpb25zPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSEwKSxuZXcgZSh2KHt9LHRoaXMub3B0aW9ucyx7fSx0KSx0aGlzLmdzLG4mJnRoaXMubmFtZXN8fHZvaWQgMCl9LHQuYWxsb2NhdGVHU0luc3RhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdzW2VdPSh0aGlzLmdzW2VdfHwwKSsxfSx0LmdldFRhZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ3x8KHRoaXMudGFnPShuPSh0PXRoaXMub3B0aW9ucykuaXNTZXJ2ZXIscj10LnVzZUNTU09NSW5qZWN0aW9uLG89dC50YXJnZXQsZT1uP25ldyBVKG8pOnI/bmV3ICQobyk6bmV3IFcobyksbmV3IFQoZSkpKTt2YXIgZSx0LG4scixvfSx0Lmhhc05hbWVGb3JJZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm5hbWVzLmhhcyhlKSYmdGhpcy5uYW1lcy5nZXQoZSkuaGFzKHQpfSx0LnJlZ2lzdGVyTmFtZT1mdW5jdGlvbihlLHQpe2lmKEIoZSksdGhpcy5uYW1lcy5oYXMoZSkpdGhpcy5uYW1lcy5nZXQoZSkuYWRkKHQpO2Vsc2V7dmFyIG49bmV3IFNldDtuLmFkZCh0KSx0aGlzLm5hbWVzLnNldChlLG4pfX0sdC5pbnNlcnRSdWxlcz1mdW5jdGlvbihlLHQsbil7dGhpcy5yZWdpc3Rlck5hbWUoZSx0KSx0aGlzLmdldFRhZygpLmluc2VydFJ1bGVzKEIoZSksbil9LHQuY2xlYXJOYW1lcz1mdW5jdGlvbihlKXt0aGlzLm5hbWVzLmhhcyhlKSYmdGhpcy5uYW1lcy5nZXQoZSkuY2xlYXIoKX0sdC5jbGVhclJ1bGVzPWZ1bmN0aW9uKGUpe3RoaXMuZ2V0VGFnKCkuY2xlYXJHcm91cChCKGUpKSx0aGlzLmNsZWFyTmFtZXMoZSl9LHQuY2xlYXJUYWc9ZnVuY3Rpb24oKXt0aGlzLnRhZz12b2lkIDB9LHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuZ2V0VGFnKCksbj10Lmxlbmd0aCxyPVwiXCIsbz0wO288bjtvKyspe3ZhciBzPXoobyk7aWYodm9pZCAwIT09cyl7dmFyIGk9ZS5uYW1lcy5nZXQocyksYT10LmdldEdyb3VwKG8pO2lmKGkmJmEmJmkuc2l6ZSl7dmFyIGM9QStcIi5nXCIrbysnW2lkPVwiJytzKydcIl0nLHU9XCJcIjt2b2lkIDAhPT1pJiZpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UubGVuZ3RoPjAmJih1Kz1lK1wiLFwiKX0pKSxyKz1cIlwiK2ErYysne2NvbnRlbnQ6XCInK3UrJ1wifS8qIXNjKi9cXG4nfX19cmV0dXJuIHJ9KHRoaXMpfSxlfSgpLEs9LyhhKShkKS9naSxRPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUrKGU+MjU/Mzk6OTcpKX07ZnVuY3Rpb24gZWUoZSl7dmFyIHQsbj1cIlwiO2Zvcih0PU1hdGguYWJzKGUpO3Q+NTI7dD10LzUyfDApbj1RKHQlNTIpK247cmV0dXJuKFEodCU1MikrbikucmVwbGFjZShLLFwiJDEtJDJcIil9dmFyIHRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQubGVuZ3RoO247KWU9MzMqZV50LmNoYXJDb2RlQXQoLS1uKTtyZXR1cm4gZX0sbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRlKDUzODEsZSl9O2Z1bmN0aW9uIHJlKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIG49ZVt0XTtpZihiKG4pJiYhTihuKSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgb2U9bmUoXCI1LjMuM1wiKSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucnVsZXM9ZSx0aGlzLnN0YXRpY1J1bGVzSWQ9XCJcIix0aGlzLmlzU3RhdGljPVwicHJvZHVjdGlvblwiPT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJih2b2lkIDA9PT1ufHxuLmlzU3RhdGljKSYmcmUoZSksdGhpcy5jb21wb25lbnRJZD10LHRoaXMuYmFzZUhhc2g9dGUob2UsdCksdGhpcy5iYXNlU3R5bGU9bixaLnJlZ2lzdGVySWQodCl9cmV0dXJuIGUucHJvdG90eXBlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNvbXBvbmVudElkLG89W107aWYodGhpcy5iYXNlU3R5bGUmJm8ucHVzaCh0aGlzLmJhc2VTdHlsZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhlLHQsbikpLHRoaXMuaXNTdGF0aWMmJiFuLmhhc2gpaWYodGhpcy5zdGF0aWNSdWxlc0lkJiZ0Lmhhc05hbWVGb3JJZChyLHRoaXMuc3RhdGljUnVsZXNJZCkpby5wdXNoKHRoaXMuc3RhdGljUnVsZXNJZCk7ZWxzZXt2YXIgcz1OZSh0aGlzLnJ1bGVzLGUsdCxuKS5qb2luKFwiXCIpLGk9ZWUodGUodGhpcy5iYXNlSGFzaCxzKT4+PjApO2lmKCF0Lmhhc05hbWVGb3JJZChyLGkpKXt2YXIgYT1uKHMsXCIuXCIraSx2b2lkIDAscik7dC5pbnNlcnRSdWxlcyhyLGksYSl9by5wdXNoKGkpLHRoaXMuc3RhdGljUnVsZXNJZD1pfWVsc2V7Zm9yKHZhciBjPXRoaXMucnVsZXMubGVuZ3RoLHU9dGUodGhpcy5iYXNlSGFzaCxuLmhhc2gpLGw9XCJcIixkPTA7ZDxjO2QrKyl7dmFyIGg9dGhpcy5ydWxlc1tkXTtpZihcInN0cmluZ1wiPT10eXBlb2YgaClsKz1oLFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJih1PXRlKHUsaCtkKSk7ZWxzZSBpZihoKXt2YXIgcD1OZShoLGUsdCxuKSxmPUFycmF5LmlzQXJyYXkocCk/cC5qb2luKFwiXCIpOnA7dT10ZSh1LGYrZCksbCs9Zn19aWYobCl7dmFyIG09ZWUodT4+PjApO2lmKCF0Lmhhc05hbWVGb3JJZChyLG0pKXt2YXIgeT1uKGwsXCIuXCIrbSx2b2lkIDAscik7dC5pbnNlcnRSdWxlcyhyLG0seSl9by5wdXNoKG0pfX1yZXR1cm4gby5qb2luKFwiIFwiKX0sZX0oKSxpZT0vXlxccypcXC9cXC8uKiQvZ20sYWU9W1wiOlwiLFwiW1wiLFwiLlwiLFwiI1wiXTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuLHIsbyxzPXZvaWQgMD09PWU/RTplLGk9cy5vcHRpb25zLGE9dm9pZCAwPT09aT9FOmksYz1zLnBsdWdpbnMsdT12b2lkIDA9PT1jP3c6YyxsPW5ldyBwKGEpLGQ9W10saD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe2lmKHQpdHJ5e2UodCtcIn1cIil9Y2F0Y2goZSl7fX1yZXR1cm4gZnVuY3Rpb24obixyLG8scyxpLGEsYyx1LGwsZCl7c3dpdGNoKG4pe2Nhc2UgMTppZigwPT09bCYmNjQ9PT1yLmNoYXJDb2RlQXQoMCkpcmV0dXJuIGUocitcIjtcIiksXCJcIjticmVhaztjYXNlIDI6aWYoMD09PXUpcmV0dXJuIHIrXCIvKnwqL1wiO2JyZWFrO2Nhc2UgMzpzd2l0Y2godSl7Y2FzZSAxMDI6Y2FzZSAxMTI6cmV0dXJuIGUob1swXStyKSxcIlwiO2RlZmF1bHQ6cmV0dXJuIHIrKDA9PT1kP1wiLyp8Ki9cIjpcIlwiKX1jYXNlLTI6ci5zcGxpdChcIi8qfCovfVwiKS5mb3JFYWNoKHQpfX19KChmdW5jdGlvbihlKXtkLnB1c2goZSl9KSksZj1mdW5jdGlvbihlLHIscyl7cmV0dXJuIDA9PT1yJiYtMSE9PWFlLmluZGV4T2Yoc1tuLmxlbmd0aF0pfHxzLm1hdGNoKG8pP2U6XCIuXCIrdH07ZnVuY3Rpb24gbShlLHMsaSxhKXt2b2lkIDA9PT1hJiYoYT1cIiZcIik7dmFyIGM9ZS5yZXBsYWNlKGllLFwiXCIpLHU9cyYmaT9pK1wiIFwiK3MrXCIgeyBcIitjK1wiIH1cIjpjO3JldHVybiB0PWEsbj1zLHI9bmV3IFJlZ0V4cChcIlxcXFxcIituK1wiXFxcXGJcIixcImdcIiksbz1uZXcgUmVnRXhwKFwiKFxcXFxcIituK1wiXFxcXGIpezIsfVwiKSxsKGl8fCFzP1wiXCI6cyx1KX1yZXR1cm4gbC51c2UoW10uY29uY2F0KHUsW2Z1bmN0aW9uKGUsdCxvKXsyPT09ZSYmby5sZW5ndGgmJm9bMF0ubGFzdEluZGV4T2Yobik+MCYmKG9bMF09b1swXS5yZXBsYWNlKHIsZikpfSxoLGZ1bmN0aW9uKGUpe2lmKC0yPT09ZSl7dmFyIHQ9ZDtyZXR1cm4gZD1bXSx0fX1dKSksbS5oYXNoPXUubGVuZ3RoP3UucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWV8fGooMTUpLHRlKGUsdC5uYW1lKX0pLDUzODEpLnRvU3RyaW5nKCk6XCJcIixtfXZhciB1ZT1yLmNyZWF0ZUNvbnRleHQoKSxsZT11ZS5Db25zdW1lcixkZT1yLmNyZWF0ZUNvbnRleHQoKSxoZT0oZGUuQ29uc3VtZXIsbmV3IFopLHBlPWNlKCk7ZnVuY3Rpb24gZmUoKXtyZXR1cm4gcyh1ZSl8fGhlfWZ1bmN0aW9uIG1lKCl7cmV0dXJuIHMoZGUpfHxwZX1mdW5jdGlvbiB5ZShlKXt2YXIgdD1vKGUuc3R5bGlzUGx1Z2lucyksbj10WzBdLHM9dFsxXSxjPWZlKCksdT1pKChmdW5jdGlvbigpe3ZhciB0PWM7cmV0dXJuIGUuc2hlZXQ/dD1lLnNoZWV0OmUudGFyZ2V0JiYodD10LnJlY29uc3RydWN0V2l0aE9wdGlvbnMoe3RhcmdldDplLnRhcmdldH0sITEpKSxlLmRpc2FibGVDU1NPTUluamVjdGlvbiYmKHQ9dC5yZWNvbnN0cnVjdFdpdGhPcHRpb25zKHt1c2VDU1NPTUluamVjdGlvbjohMX0pKSx0fSksW2UuZGlzYWJsZUNTU09NSW5qZWN0aW9uLGUuc2hlZXQsZS50YXJnZXRdKSxsPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIGNlKHtvcHRpb25zOntwcmVmaXg6IWUuZGlzYWJsZVZlbmRvclByZWZpeGVzfSxwbHVnaW5zOm59KX0pLFtlLmRpc2FibGVWZW5kb3JQcmVmaXhlcyxuXSk7cmV0dXJuIGEoKGZ1bmN0aW9uKCl7aChuLGUuc3R5bGlzUGx1Z2lucyl8fHMoZS5zdHlsaXNQbHVnaW5zKX0pLFtlLnN0eWxpc1BsdWdpbnNdKSxyLmNyZWF0ZUVsZW1lbnQodWUuUHJvdmlkZXIse3ZhbHVlOnV9LHIuY3JlYXRlRWxlbWVudChkZS5Qcm92aWRlcix7dmFsdWU6bH0sXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOVj9yLkNoaWxkcmVuLm9ubHkoZS5jaGlsZHJlbik6ZS5jaGlsZHJlbikpfXZhciB2ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbj10aGlzO3RoaXMuaW5qZWN0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9cGUpO3ZhciByPW4ubmFtZSt0Lmhhc2g7ZS5oYXNOYW1lRm9ySWQobi5pZCxyKXx8ZS5pbnNlcnRSdWxlcyhuLmlkLHIsdChuLnJ1bGVzLHIsXCJAa2V5ZnJhbWVzXCIpKX0sdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBqKDEyLFN0cmluZyhuLm5hbWUpKX0sdGhpcy5uYW1lPWUsdGhpcy5pZD1cInNjLWtleWZyYW1lcy1cIitlLHRoaXMucnVsZXM9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9cGUpLHRoaXMubmFtZStlLmhhc2h9LGV9KCksZ2U9LyhbQS1aXSkvLFNlPS8oW0EtWl0pL2csd2U9L15tcy0vLEVlPWZ1bmN0aW9uKGUpe3JldHVyblwiLVwiK2UudG9Mb3dlckNhc2UoKX07ZnVuY3Rpb24gYmUoZSl7cmV0dXJuIGdlLnRlc3QoZSk/ZS5yZXBsYWNlKFNlLEVlKS5yZXBsYWNlKHdlLFwiLW1zLVwiKTplfXZhciBfZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ITE9PT1lfHxcIlwiPT09ZX07ZnVuY3Rpb24gTmUoZSxuLHIsbyl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciBzLGk9W10sYT0wLGM9ZS5sZW5ndGg7YTxjO2ErPTEpXCJcIiE9PShzPU5lKGVbYV0sbixyLG8pKSYmKEFycmF5LmlzQXJyYXkocyk/aS5wdXNoLmFwcGx5KGkscyk6aS5wdXNoKHMpKTtyZXR1cm4gaX1pZihfZShlKSlyZXR1cm5cIlwiO2lmKE4oZSkpcmV0dXJuXCIuXCIrZS5zdHlsZWRDb21wb25lbnRJZDtpZihiKGUpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZihsPWUpfHxsLnByb3RvdHlwZSYmbC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudHx8IW4pcmV0dXJuIGU7dmFyIHU9ZShuKTtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZ0KHUpJiZjb25zb2xlLndhcm4oXyhlKStcIiBpcyBub3QgYSBzdHlsZWQgY29tcG9uZW50IGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gdmlhIGNvbXBvbmVudCBzZWxlY3Rvci4gU2VlIGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2FkdmFuY2VkI3JlZmVycmluZy10by1vdGhlci1jb21wb25lbnRzIGZvciBtb3JlIGRldGFpbHMuXCIpLE5lKHUsbixyLG8pfXZhciBsO3JldHVybiBlIGluc3RhbmNlb2YgdmU/cj8oZS5pbmplY3QocixvKSxlLmdldE5hbWUobykpOmU6UyhlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHIsbyxzPVtdO2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJiFfZSh0W2ldKSYmKEFycmF5LmlzQXJyYXkodFtpXSkmJnRbaV0uaXNDc3N8fGIodFtpXSk/cy5wdXNoKGJlKGkpK1wiOlwiLHRbaV0sXCI7XCIpOlModFtpXSk/cy5wdXNoLmFwcGx5KHMsZSh0W2ldLGkpKTpzLnB1c2goYmUoaSkrXCI6IFwiKyhyPWksbnVsbD09KG89dFtpXSl8fFwiYm9vbGVhblwiPT10eXBlb2Ygb3x8XCJcIj09PW8/XCJcIjpcIm51bWJlclwiIT10eXBlb2Ygb3x8MD09PW98fHIgaW4gZj9TdHJpbmcobykudHJpbSgpOm8rXCJweFwiKStcIjtcIikpO3JldHVybiBuP1tuK1wiIHtcIl0uY29uY2F0KHMsW1wifVwiXSk6c30oZSk6ZS50b1N0cmluZygpfXZhciBBZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKGUuaXNDc3M9ITApLGV9O2Z1bmN0aW9uIENlKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gYihlKXx8UyhlKT9BZShOZShnKHcsW2VdLmNvbmNhdChuKSkpKTowPT09bi5sZW5ndGgmJjE9PT1lLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGVbMF0/ZTpBZShOZShnKGUsbikpKX12YXIgSWU9L2ludmFsaWQgaG9vayBjYWxsL2ksUGU9bmV3IFNldCxPZT1mdW5jdGlvbihlLHQpe2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYpe3ZhciBuPVwiVGhlIGNvbXBvbmVudCBcIitlKyh0Pycgd2l0aCB0aGUgaWQgb2YgXCInK3QrJ1wiJzpcIlwiKStcIiBoYXMgYmVlbiBjcmVhdGVkIGR5bmFtaWNhbGx5LlxcbllvdSBtYXkgc2VlIHRoaXMgd2FybmluZyBiZWNhdXNlIHlvdSd2ZSBjYWxsZWQgc3R5bGVkIGluc2lkZSBhbm90aGVyIGNvbXBvbmVudC5cXG5UbyByZXNvbHZlIHRoaXMgb25seSBjcmVhdGUgbmV3IFN0eWxlZENvbXBvbmVudHMgb3V0c2lkZSBvZiBhbnkgcmVuZGVyIG1ldGhvZCBhbmQgZnVuY3Rpb24gY29tcG9uZW50LlwiLHI9Y29uc29sZS5lcnJvcjt0cnl7dmFyIG89ITA7Y29uc29sZS5lcnJvcj1mdW5jdGlvbihlKXtpZihJZS50ZXN0KGUpKW89ITEsUGUuZGVsZXRlKG4pO2Vsc2V7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscz1uZXcgQXJyYXkodD4xP3QtMTowKSxpPTE7aTx0O2krKylzW2ktMV09YXJndW1lbnRzW2ldO3IuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQocykpfX0sYygpLG8mJiFQZS5oYXMobikmJihjb25zb2xlLndhcm4obiksUGUuYWRkKG4pKX1jYXRjaChlKXtJZS50ZXN0KGUubWVzc2FnZSkmJlBlLmRlbGV0ZShuKX1maW5hbGx5e2NvbnNvbGUuZXJyb3I9cn19fSxSZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPUUpLGUudGhlbWUhPT1uLnRoZW1lJiZlLnRoZW1lfHx0fHxuLnRoZW1lfSxEZT0vWyFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXFxcXFxcXV5ge3x9fi1dKy9nLGplPS8oXi18LSQpL2c7ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGUucmVwbGFjZShEZSxcIi1cIikucmVwbGFjZShqZSxcIlwiKX12YXIgeGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVlKG5lKGUpPj4+MCl9O2Z1bmN0aW9uIGtlKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoXCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOVnx8ZS5jaGFyQXQoMCk9PT1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKX12YXIgVmU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZXx8XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiYhQXJyYXkuaXNBcnJheShlKX0sQmU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJfX3Byb3RvX19cIiE9PWUmJlwiY29uc3RydWN0b3JcIiE9PWUmJlwicHJvdG90eXBlXCIhPT1lfTtmdW5jdGlvbiB6ZShlLHQsbil7dmFyIHI9ZVtuXTtWZSh0KSYmVmUocik/TWUocix0KTplW25dPXR9ZnVuY3Rpb24gTWUoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgbz0wLHM9bjtvPHMubGVuZ3RoO28rKyl7dmFyIGk9c1tvXTtpZihWZShpKSlmb3IodmFyIGEgaW4gaSlCZShhKSYmemUoZSxpW2FdLGEpfXJldHVybiBlfXZhciBHZT1yLmNyZWF0ZUNvbnRleHQoKSxMZT1HZS5Db25zdW1lcjtmdW5jdGlvbiBGZShlKXt2YXIgdD1zKEdlKSxuPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIGooMTQpO2lmKGIoZSkpe3ZhciBuPWUodCk7cmV0dXJuXCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOVnx8bnVsbCE9PW4mJiFBcnJheS5pc0FycmF5KG4pJiZcIm9iamVjdFwiPT10eXBlb2Ygbj9uOmooNyl9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPXR5cGVvZiBlP2ooOCk6dD92KHt9LHQse30sZSk6ZX0oZS50aGVtZSx0KX0pLFtlLnRoZW1lLHRdKTtyZXR1cm4gZS5jaGlsZHJlbj9yLmNyZWF0ZUVsZW1lbnQoR2UuUHJvdmlkZXIse3ZhbHVlOm59LGUuY2hpbGRyZW4pOm51bGx9dmFyIFllPXt9O2Z1bmN0aW9uIHFlKGUsdCxuKXt2YXIgbz1OKGUpLGk9IWtlKGUpLGE9dC5hdHRycyxjPXZvaWQgMD09PWE/dzphLGQ9dC5jb21wb25lbnRJZCxoPXZvaWQgMD09PWQ/ZnVuY3Rpb24oZSx0KXt2YXIgbj1cInN0cmluZ1wiIT10eXBlb2YgZT9cInNjXCI6VGUoZSk7WWVbbl09KFllW25dfHwwKSsxO3ZhciByPW4rXCItXCIreGUoXCI1LjMuM1wiK24rWWVbbl0pO3JldHVybiB0P3QrXCItXCIrcjpyfSh0LmRpc3BsYXlOYW1lLHQucGFyZW50Q29tcG9uZW50SWQpOmQscD10LmRpc3BsYXlOYW1lLGY9dm9pZCAwPT09cD9mdW5jdGlvbihlKXtyZXR1cm4ga2UoZSk/XCJzdHlsZWQuXCIrZTpcIlN0eWxlZChcIitfKGUpK1wiKVwifShlKTpwLGc9dC5kaXNwbGF5TmFtZSYmdC5jb21wb25lbnRJZD9UZSh0LmRpc3BsYXlOYW1lKStcIi1cIit0LmNvbXBvbmVudElkOnQuY29tcG9uZW50SWR8fGgsUz1vJiZlLmF0dHJzP0FycmF5LnByb3RvdHlwZS5jb25jYXQoZS5hdHRycyxjKS5maWx0ZXIoQm9vbGVhbik6YyxBPXQuc2hvdWxkRm9yd2FyZFByb3A7byYmZS5zaG91bGRGb3J3YXJkUHJvcCYmKEE9dC5zaG91bGRGb3J3YXJkUHJvcD9mdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuc2hvdWxkRm9yd2FyZFByb3AobixyLG8pJiZ0LnNob3VsZEZvcndhcmRQcm9wKG4scixvKX06ZS5zaG91bGRGb3J3YXJkUHJvcCk7dmFyIEMsST1uZXcgc2UobixnLG8/ZS5jb21wb25lbnRTdHlsZTp2b2lkIDApLFA9SS5pc1N0YXRpYyYmMD09PWMubGVuZ3RoLE89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5hdHRycyxpPWUuY29tcG9uZW50U3R5bGUsYT1lLmRlZmF1bHRQcm9wcyxjPWUuZm9sZGVkQ29tcG9uZW50SWRzLGQ9ZS5zaG91bGRGb3J3YXJkUHJvcCxoPWUuc3R5bGVkQ29tcG9uZW50SWQscD1lLnRhcmdldDtcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZsKGgpO3ZhciBmPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1lJiYoZT1FKTt2YXIgcj12KHt9LHQse3RoZW1lOmV9KSxvPXt9O3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0LG4scyxpPWU7Zm9yKHQgaW4gYihpKSYmKGk9aShyKSksaSlyW3RdPW9bdF09XCJjbGFzc05hbWVcIj09PXQ/KG49b1t0XSxzPWlbdF0sbiYmcz9uK1wiIFwiK3M6bnx8cyk6aVt0XX0pKSxbcixvXX0oUmUodCxzKEdlKSxhKXx8RSx0LG8pLHk9ZlswXSxnPWZbMV0sUz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1mZSgpLHM9bWUoKSxpPXQ/ZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhFLG8scyk6ZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyhuLG8scyk7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmbChpKSxcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYhdCYmciYmcihpKSxpfShpLHIseSxcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WP2Uud2FyblRvb01hbnlDbGFzc2VzOnZvaWQgMCksdz1uLF89Zy4kYXN8fHQuJGFzfHxnLmFzfHx0LmFzfHxwLE49a2UoXyksQT1nIT09dD92KHt9LHQse30sZyk6dCxDPXt9O2Zvcih2YXIgSSBpbiBBKVwiJFwiIT09SVswXSYmXCJhc1wiIT09SSYmKFwiZm9yd2FyZGVkQXNcIj09PUk/Qy5hcz1BW0ldOihkP2QoSSxtLF8pOiFOfHxtKEkpKSYmKENbSV09QVtJXSkpO3JldHVybiB0LnN0eWxlJiZnLnN0eWxlIT09dC5zdHlsZSYmKEMuc3R5bGU9dih7fSx0LnN0eWxlLHt9LGcuc3R5bGUpKSxDLmNsYXNzTmFtZT1BcnJheS5wcm90b3R5cGUuY29uY2F0KGMsaCxTIT09aD9TOm51bGwsdC5jbGFzc05hbWUsZy5jbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxDLnJlZj13LHUoXyxDKX0oQyxlLHQsUCl9O3JldHVybiBPLmRpc3BsYXlOYW1lPWYsKEM9ci5mb3J3YXJkUmVmKE8pKS5hdHRycz1TLEMuY29tcG9uZW50U3R5bGU9SSxDLmRpc3BsYXlOYW1lPWYsQy5zaG91bGRGb3J3YXJkUHJvcD1BLEMuZm9sZGVkQ29tcG9uZW50SWRzPW8/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmZvbGRlZENvbXBvbmVudElkcyxlLnN0eWxlZENvbXBvbmVudElkKTp3LEMuc3R5bGVkQ29tcG9uZW50SWQ9ZyxDLnRhcmdldD1vP2UudGFyZ2V0OmUsQy53aXRoQ29tcG9uZW50PWZ1bmN0aW9uKGUpe3ZhciByPXQuY29tcG9uZW50SWQsbz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LHM9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyluPXNbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb30odCxbXCJjb21wb25lbnRJZFwiXSkscz1yJiZyK1wiLVwiKyhrZShlKT9lOlRlKF8oZSkpKTtyZXR1cm4gcWUoZSx2KHt9LG8se2F0dHJzOlMsY29tcG9uZW50SWQ6c30pLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQyxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPW8/TWUoe30sZS5kZWZhdWx0UHJvcHMsdCk6dH19KSxcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYoT2UoZixnKSxDLndhcm5Ub29NYW55Q2xhc3Nlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9LHI9ITE7cmV0dXJuIGZ1bmN0aW9uKG8pe2lmKCFyJiYobltvXT0hMCxPYmplY3Qua2V5cyhuKS5sZW5ndGg+PTIwMCkpe3ZhciBzPXQ/JyB3aXRoIHRoZSBpZCBvZiBcIicrdCsnXCInOlwiXCI7Y29uc29sZS53YXJuKFwiT3ZlciAyMDAgY2xhc3NlcyB3ZXJlIGdlbmVyYXRlZCBmb3IgY29tcG9uZW50IFwiK2UrcytcIi5cXG5Db25zaWRlciB1c2luZyB0aGUgYXR0cnMgbWV0aG9kLCB0b2dldGhlciB3aXRoIGEgc3R5bGUgb2JqZWN0IGZvciBmcmVxdWVudGx5IGNoYW5nZWQgc3R5bGVzLlxcbkV4YW1wbGU6XFxuICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQuZGl2LmF0dHJzKHByb3BzID0+ICh7XFxuICAgIHN0eWxlOiB7XFxuICAgICAgYmFja2dyb3VuZDogcHJvcHMuYmFja2dyb3VuZCxcXG4gICAgfSxcXG4gIH0pKWB3aWR0aDogMTAwJTtgXFxuXFxuICA8Q29tcG9uZW50IC8+XCIpLHI9ITAsbj17fX19fShmLGcpKSxDLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCIuXCIrQy5zdHlsZWRDb21wb25lbnRJZH0saSYmeShDLGUse2F0dHJzOiEwLGNvbXBvbmVudFN0eWxlOiEwLGRpc3BsYXlOYW1lOiEwLGZvbGRlZENvbXBvbmVudElkczohMCxzaG91bGRGb3J3YXJkUHJvcDohMCxzdHlsZWRDb21wb25lbnRJZDohMCx0YXJnZXQ6ITAsd2l0aENvbXBvbmVudDohMH0pLEN9dmFyIEhlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBlKHQscixvKXtpZih2b2lkIDA9PT1vJiYobz1FKSwhbihyKSlyZXR1cm4gaigxLFN0cmluZyhyKSk7dmFyIHM9ZnVuY3Rpb24oKXtyZXR1cm4gdChyLG8sQ2UuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfTtyZXR1cm4gcy53aXRoQ29uZmlnPWZ1bmN0aW9uKG4pe3JldHVybiBlKHQscix2KHt9LG8se30sbikpfSxzLmF0dHJzPWZ1bmN0aW9uKG4pe3JldHVybiBlKHQscix2KHt9LG8se2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQoby5hdHRycyxuKS5maWx0ZXIoQm9vbGVhbil9KSl9LHN9KHFlLGUpfTtbXCJhXCIsXCJhYmJyXCIsXCJhZGRyZXNzXCIsXCJhcmVhXCIsXCJhcnRpY2xlXCIsXCJhc2lkZVwiLFwiYXVkaW9cIixcImJcIixcImJhc2VcIixcImJkaVwiLFwiYmRvXCIsXCJiaWdcIixcImJsb2NrcXVvdGVcIixcImJvZHlcIixcImJyXCIsXCJidXR0b25cIixcImNhbnZhc1wiLFwiY2FwdGlvblwiLFwiY2l0ZVwiLFwiY29kZVwiLFwiY29sXCIsXCJjb2xncm91cFwiLFwiZGF0YVwiLFwiZGF0YWxpc3RcIixcImRkXCIsXCJkZWxcIixcImRldGFpbHNcIixcImRmblwiLFwiZGlhbG9nXCIsXCJkaXZcIixcImRsXCIsXCJkdFwiLFwiZW1cIixcImVtYmVkXCIsXCJmaWVsZHNldFwiLFwiZmlnY2FwdGlvblwiLFwiZmlndXJlXCIsXCJmb290ZXJcIixcImZvcm1cIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhlYWRcIixcImhlYWRlclwiLFwiaGdyb3VwXCIsXCJoclwiLFwiaHRtbFwiLFwiaVwiLFwiaWZyYW1lXCIsXCJpbWdcIixcImlucHV0XCIsXCJpbnNcIixcImtiZFwiLFwia2V5Z2VuXCIsXCJsYWJlbFwiLFwibGVnZW5kXCIsXCJsaVwiLFwibGlua1wiLFwibWFpblwiLFwibWFwXCIsXCJtYXJrXCIsXCJtYXJxdWVlXCIsXCJtZW51XCIsXCJtZW51aXRlbVwiLFwibWV0YVwiLFwibWV0ZXJcIixcIm5hdlwiLFwibm9zY3JpcHRcIixcIm9iamVjdFwiLFwib2xcIixcIm9wdGdyb3VwXCIsXCJvcHRpb25cIixcIm91dHB1dFwiLFwicFwiLFwicGFyYW1cIixcInBpY3R1cmVcIixcInByZVwiLFwicHJvZ3Jlc3NcIixcInFcIixcInJwXCIsXCJydFwiLFwicnVieVwiLFwic1wiLFwic2FtcFwiLFwic2NyaXB0XCIsXCJzZWN0aW9uXCIsXCJzZWxlY3RcIixcInNtYWxsXCIsXCJzb3VyY2VcIixcInNwYW5cIixcInN0cm9uZ1wiLFwic3R5bGVcIixcInN1YlwiLFwic3VtbWFyeVwiLFwic3VwXCIsXCJ0YWJsZVwiLFwidGJvZHlcIixcInRkXCIsXCJ0ZXh0YXJlYVwiLFwidGZvb3RcIixcInRoXCIsXCJ0aGVhZFwiLFwidGltZVwiLFwidGl0bGVcIixcInRyXCIsXCJ0cmFja1wiLFwidVwiLFwidWxcIixcInZhclwiLFwidmlkZW9cIixcIndiclwiLFwiY2lyY2xlXCIsXCJjbGlwUGF0aFwiLFwiZGVmc1wiLFwiZWxsaXBzZVwiLFwiZm9yZWlnbk9iamVjdFwiLFwiZ1wiLFwiaW1hZ2VcIixcImxpbmVcIixcImxpbmVhckdyYWRpZW50XCIsXCJtYXJrZXJcIixcIm1hc2tcIixcInBhdGhcIixcInBhdHRlcm5cIixcInBvbHlnb25cIixcInBvbHlsaW5lXCIsXCJyYWRpYWxHcmFkaWVudFwiLFwicmVjdFwiLFwic3RvcFwiLFwic3ZnXCIsXCJ0ZXh0XCIsXCJ0ZXh0UGF0aFwiLFwidHNwYW5cIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7SGVbZV09SGUoZSl9KSk7dmFyICRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucnVsZXM9ZSx0aGlzLmNvbXBvbmVudElkPXQsdGhpcy5pc1N0YXRpYz1yZShlKSxaLnJlZ2lzdGVySWQodGhpcy5jb21wb25lbnRJZCsxKX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jcmVhdGVTdHlsZXM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89cihOZSh0aGlzLnJ1bGVzLHQsbixyKS5qb2luKFwiXCIpLFwiXCIpLHM9dGhpcy5jb21wb25lbnRJZCtlO24uaW5zZXJ0UnVsZXMocyxzLG8pfSx0LnJlbW92ZVN0eWxlcz1mdW5jdGlvbihlLHQpe3QuY2xlYXJSdWxlcyh0aGlzLmNvbXBvbmVudElkK2UpfSx0LnJlbmRlclN0eWxlcz1mdW5jdGlvbihlLHQsbixyKXtlPjImJloucmVnaXN0ZXJJZCh0aGlzLmNvbXBvbmVudElkK2UpLHRoaXMucmVtb3ZlU3R5bGVzKGUsbiksdGhpcy5jcmVhdGVTdHlsZXMoZSx0LG4scil9LGV9KCk7ZnVuY3Rpb24gV2UoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxvPTE7bzx0O28rKyluW28tMV09YXJndW1lbnRzW29dO3ZhciBpPUNlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKSxhPVwic2MtZ2xvYmFsLVwiK3hlKEpTT04uc3RyaW5naWZ5KGkpKSx1PW5ldyAkZShpLGEpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZmUoKSxuPW1lKCksbz1zKEdlKSxsPWModC5hbGxvY2F0ZUdTSW5zdGFuY2UoYSkpLmN1cnJlbnQ7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmci5DaGlsZHJlbi5jb3VudChlLmNoaWxkcmVuKSYmY29uc29sZS53YXJuKFwiVGhlIGdsb2JhbCBzdHlsZSBjb21wb25lbnQgXCIrYStcIiB3YXMgZ2l2ZW4gY2hpbGQgSlNYLiBjcmVhdGVHbG9iYWxTdHlsZSBkb2VzIG5vdCByZW5kZXIgY2hpbGRyZW4uXCIpLFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmkuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJi0xIT09ZS5pbmRleE9mKFwiQGltcG9ydFwiKX0pKSYmY29uc29sZS53YXJuKFwiUGxlYXNlIGRvIG5vdCB1c2UgQGltcG9ydCBDU1Mgc3ludGF4IGluIGNyZWF0ZUdsb2JhbFN0eWxlIGF0IHRoaXMgdGltZSwgYXMgdGhlIENTU09NIEFQSXMgd2UgdXNlIGluIHByb2R1Y3Rpb24gZG8gbm90IGhhbmRsZSBpdCB3ZWxsLiBJbnN0ZWFkLCB3ZSByZWNvbW1lbmQgdXNpbmcgYSBsaWJyYXJ5IHN1Y2ggYXMgcmVhY3QtaGVsbWV0IHRvIGluamVjdCBhIHR5cGljYWwgPGxpbms+IG1ldGEgdGFnIHRvIHRoZSBzdHlsZXNoZWV0LCBvciBzaW1wbHkgZW1iZWRkaW5nIGl0IG1hbnVhbGx5IGluIHlvdXIgaW5kZXguaHRtbCA8aGVhZD4gc2VjdGlvbiBmb3IgYSBzaW1wbGVyIGFwcC5cIiksdC5zZXJ2ZXImJmgobCxlLHQsbyxuKSxkKChmdW5jdGlvbigpe2lmKCF0LnNlcnZlcilyZXR1cm4gaChsLGUsdCxvLG4pLGZ1bmN0aW9uKCl7cmV0dXJuIHUucmVtb3ZlU3R5bGVzKGwsdCl9fSksW2wsZSx0LG8sbl0pLG51bGx9ZnVuY3Rpb24gaChlLHQsbixyLG8pe2lmKHUuaXNTdGF0aWMpdS5yZW5kZXJTdHlsZXMoZSxPLG4sbyk7ZWxzZXt2YXIgcz12KHt9LHQse3RoZW1lOlJlKHQscixsLmRlZmF1bHRQcm9wcyl9KTt1LnJlbmRlclN0eWxlcyhlLHMsbixvKX19cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmT2UoYSksci5tZW1vKGwpfWZ1bmN0aW9uIFVlKGUpe1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJlwiUmVhY3ROYXRpdmVcIj09PW5hdmlnYXRvci5wcm9kdWN0JiZjb25zb2xlLndhcm4oXCJga2V5ZnJhbWVzYCBjYW5ub3QgYmUgdXNlZCBvbiBSZWFjdE5hdGl2ZSwgb25seSBvbiB0aGUgd2ViLiBUbyBkbyBhbmltYXRpb24gaW4gUmVhY3ROYXRpdmUgcGxlYXNlIHVzZSBBbmltYXRlZC5cIik7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPUNlLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKS5qb2luKFwiXCIpLHM9eGUobyk7cmV0dXJuIG5ldyB2ZShzLG8pfXZhciBKZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuX2VtaXRTaGVldENTUz1mdW5jdGlvbigpe3ZhciB0PWUuaW5zdGFuY2UudG9TdHJpbmcoKTtpZighdClyZXR1cm5cIlwiO3ZhciBuPXEoKTtyZXR1cm5cIjxzdHlsZSBcIitbbiYmJ25vbmNlPVwiJytuKydcIicsQSsnPVwidHJ1ZVwiJywnZGF0YS1zdHlsZWQtdmVyc2lvbj1cIjUuMy4zXCInXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIikrXCI+XCIrdCtcIjwvc3R5bGU+XCJ9LHRoaXMuZ2V0U3R5bGVUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2VhbGVkP2ooMik6ZS5fZW1pdFNoZWV0Q1NTKCl9LHRoaXMuZ2V0U3R5bGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ7aWYoZS5zZWFsZWQpcmV0dXJuIGooMik7dmFyIG49KCh0PXt9KVtBXT1cIlwiLHRbXCJkYXRhLXN0eWxlZC12ZXJzaW9uXCJdPVwiNS4zLjNcIix0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtfX2h0bWw6ZS5pbnN0YW5jZS50b1N0cmluZygpfSx0KSxvPXEoKTtyZXR1cm4gbyYmKG4ubm9uY2U9byksW3IuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsdih7fSxuLHtrZXk6XCJzYy0wLTBcIn0pKV19LHRoaXMuc2VhbD1mdW5jdGlvbigpe2Uuc2VhbGVkPSEwfSx0aGlzLmluc3RhbmNlPW5ldyBaKHtpc1NlcnZlcjohMH0pLHRoaXMuc2VhbGVkPSExfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNvbGxlY3RTdHlsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VhbGVkP2ooMik6ci5jcmVhdGVFbGVtZW50KHllLHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sdC5pbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIGooMyl9LGV9KCksWGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5mb3J3YXJkUmVmKChmdW5jdGlvbih0LG4pe3ZhciBvPXMoR2UpLGk9ZS5kZWZhdWx0UHJvcHMsYT1SZSh0LG8saSk7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmdm9pZCAwPT09YSYmY29uc29sZS53YXJuKCdbd2l0aFRoZW1lXSBZb3UgYXJlIG5vdCB1c2luZyBhIFRoZW1lUHJvdmlkZXIgbm9yIHBhc3NpbmcgYSB0aGVtZSBwcm9wIG9yIGEgdGhlbWUgaW4gZGVmYXVsdFByb3BzIGluIGNvbXBvbmVudCBjbGFzcyBcIicrXyhlKSsnXCInKSxyLmNyZWF0ZUVsZW1lbnQoZSx2KHt9LHQse3RoZW1lOmEscmVmOm59KSl9KSk7cmV0dXJuIHkodCxlKSx0LmRpc3BsYXlOYW1lPVwiV2l0aFRoZW1lKFwiK18oZSkrXCIpXCIsdH0sWmU9ZnVuY3Rpb24oKXtyZXR1cm4gcyhHZSl9LEtlPXtTdHlsZVNoZWV0OlosbWFzdGVyU2hlZXQ6aGV9O1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJlwiUmVhY3ROYXRpdmVcIj09PW5hdmlnYXRvci5wcm9kdWN0JiZjb25zb2xlLndhcm4oXCJJdCBsb29rcyBsaWtlIHlvdSd2ZSBpbXBvcnRlZCAnc3R5bGVkLWNvbXBvbmVudHMnIG9uIFJlYWN0IE5hdGl2ZS5cXG5QZXJoYXBzIHlvdSdyZSBsb29raW5nIHRvIGltcG9ydCAnc3R5bGVkLWNvbXBvbmVudHMvbmF0aXZlJz9cXG5SZWFkIG1vcmUgYWJvdXQgdGhpcyBhdCBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9iYXNpY3MjcmVhY3QtbmF0aXZlXCIpLFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidGVzdFwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3dbXCJfX3N0eWxlZC1jb21wb25lbnRzLWluaXRfX1wiXT13aW5kb3dbXCJfX3N0eWxlZC1jb21wb25lbnRzLWluaXRfX1wiXXx8MCwxPT09d2luZG93W1wiX19zdHlsZWQtY29tcG9uZW50cy1pbml0X19cIl0mJmNvbnNvbGUud2FybihcIkl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHNldmVyYWwgaW5zdGFuY2VzIG9mICdzdHlsZWQtY29tcG9uZW50cycgaW5pdGlhbGl6ZWQgaW4gdGhpcyBhcHBsaWNhdGlvbi4gVGhpcyBtYXkgY2F1c2UgZHluYW1pYyBzdHlsZXMgdG8gbm90IHJlbmRlciBwcm9wZXJseSwgZXJyb3JzIGR1cmluZyB0aGUgcmVoeWRyYXRpb24gcHJvY2VzcywgYSBtaXNzaW5nIHRoZW1lIHByb3AsIGFuZCBtYWtlcyB5b3VyIGFwcGxpY2F0aW9uIGJpZ2dlciB3aXRob3V0IGdvb2QgcmVhc29uLlxcblxcblNlZSBodHRwczovL3MtYy5zaC8yQkFYemVkIGZvciBtb3JlIGluZm8uXCIpLHdpbmRvd1tcIl9fc3R5bGVkLWNvbXBvbmVudHMtaW5pdF9fXCJdKz0xKTtleHBvcnQgZGVmYXVsdCBIZTtleHBvcnR7SmUgYXMgU2VydmVyU3R5bGVTaGVldCxsZSBhcyBTdHlsZVNoZWV0Q29uc3VtZXIsdWUgYXMgU3R5bGVTaGVldENvbnRleHQseWUgYXMgU3R5bGVTaGVldE1hbmFnZXIsTGUgYXMgVGhlbWVDb25zdW1lcixHZSBhcyBUaGVtZUNvbnRleHQsRmUgYXMgVGhlbWVQcm92aWRlcixLZSBhcyBfX1BSSVZBVEVfXyxXZSBhcyBjcmVhdGVHbG9iYWxTdHlsZSxDZSBhcyBjc3MsTiBhcyBpc1N0eWxlZENvbXBvbmVudCxVZSBhcyBrZXlmcmFtZXMsWmUgYXMgdXNlVGhlbWUsQyBhcyB2ZXJzaW9uLFhlIGFzIHdpdGhUaGVtZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZWQtY29tcG9uZW50cy5icm93c2VyLmVzbS5qcy5tYXBcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib2JqQSIsIm9iakIiLCJjb21wYXJlIiwiY29tcGFyZUNvbnRleHQiLCJyZXQiLCJjYWxsIiwia2V5c0EiLCJPYmplY3QiLCJrZXlzIiwia2V5c0IiLCJsZW5ndGgiLCJiSGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImJpbmQiLCJpZHgiLCJrZXkiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJXIiwiTSIsImQiLCJjIiwiZSIsImgiLCJhIiwicSIsImciLCJrIiwieSIsIkMiLCJtIiwiYiIsInYiLCJuIiwieCIsIksiLCJ1IiwibCIsInIiLCJJIiwidCIsIkIiLCJKIiwiZiIsInAiLCJGIiwiRyIsImNoYXJDb2RlQXQiLCJyZXBsYWNlIiwiTiIsInRyaW0iLCJjaGFyQXQiLCJzdWJzdHJpbmciLCJjYSIsIk8iLCJBIiwiSCIsIlgiLCJEIiwieiIsImpvaW4iLCJkYSIsImVhIiwiZmEiLCJ3IiwiTCIsIlAiLCJZIiwiRSIsImhhIiwiUSIsInNwbGl0IiwiaWEiLCJaIiwiaW5kZXhPZiIsImphIiwia2EiLCJ0ZXN0IiwiYWEiLCJiYSIsImxhIiwibWEiLCJSIiwibmEiLCJvYSIsIlMiLCJVIiwicHJlZml4IiwidXNlIiwiVCIsInNldCIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiYm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVNsaWNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsImJveEZsZXgiLCJib3hGbGV4R3JvdXAiLCJib3hPcmRpbmFsR3JvdXAiLCJjb2x1bW5Db3VudCIsImNvbHVtbnMiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJncmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJtc0dyaWRSb3ciLCJtc0dyaWRSb3dTcGFuIiwibXNHcmlkQ29sdW1uIiwibXNHcmlkQ29sdW1uU3BhbiIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsInRhYlNpemUiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiV2Via2l0TGluZUNsYW1wIiwiZmlsbE9wYWNpdHkiLCJmbG9vZE9wYWNpdHkiLCJzdG9wT3BhY2l0eSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlT3BhY2l0eSIsInN0cm9rZVdpZHRoIiwicmVhY3RQcm9wc1JlZ2V4IiwiY2FjaGUiLCJhcmciLCJ1bmRlZmluZWQiLCJwcm9wIiwiYXNzaWduIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJ0aGlzIiwibyIsInB1c2giLCJ0b1N0cmluZyIsImZyZWV6ZSIsIl8iLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJzdHlsZWRDb21wb25lbnRJZCIsIlJFQUNUX0FQUF9TQ19BVFRSIiwiU0NfQVRUUiIsIndpbmRvdyIsIkJvb2xlYW4iLCJTQ19ESVNBQkxFX1NQRUVEWSIsIlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWSIsImoiLCJBcnJheSIsIkVycm9yIiwiZ3JvdXBTaXplcyIsIlVpbnQzMkFycmF5IiwidGFnIiwiaW5kZXhPZkdyb3VwIiwiaW5zZXJ0UnVsZXMiLCJzIiwiaSIsImluc2VydFJ1bGUiLCJjbGVhckdyb3VwIiwiZGVsZXRlUnVsZSIsImdldEdyb3VwIiwiZ2V0UnVsZSIsIk1hcCIsIlYiLCJoYXMiLCJnZXQiLCJSZWdFeHAiLCJyZWdpc3Rlck5hbWUiLCJ0ZXh0Q29udGVudCIsIm1hdGNoIiwicGFyc2VJbnQiLCJnZXRUYWciLCJfX3dlYnBhY2tfbm9uY2VfXyIsImRvY3VtZW50IiwiaGVhZCIsImNyZWF0ZUVsZW1lbnQiLCJjaGlsZE5vZGVzIiwibm9kZVR5cGUiLCJoYXNBdHRyaWJ1dGUiLCJuZXh0U2libGluZyIsInNldEF0dHJpYnV0ZSIsImluc2VydEJlZm9yZSIsIiQiLCJlbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsInNoZWV0Iiwic3R5bGVTaGVldHMiLCJvd25lck5vZGUiLCJjc3NSdWxlcyIsImNzc1RleHQiLCJub2RlcyIsInJlbW92ZUNoaWxkIiwicnVsZXMiLCJzcGxpY2UiLCJpc1NlcnZlciIsInVzZUNTU09NSW5qZWN0aW9uIiwib3B0aW9ucyIsImdzIiwibmFtZXMiLCJzZXJ2ZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0QXR0cmlidXRlIiwicGFyZW50Tm9kZSIsInJlZ2lzdGVySWQiLCJyZWNvbnN0cnVjdFdpdGhPcHRpb25zIiwiYWxsb2NhdGVHU0luc3RhbmNlIiwidGFyZ2V0IiwiaGFzTmFtZUZvcklkIiwiYWRkIiwiU2V0IiwiY2xlYXJOYW1lcyIsImNsZWFyIiwiY2xlYXJSdWxlcyIsImNsZWFyVGFnIiwic2l6ZSIsImZvckVhY2giLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJlZSIsIk1hdGgiLCJhYnMiLCJ0ZSIsIm5lIiwicmUiLCJvZSIsInNlIiwic3RhdGljUnVsZXNJZCIsImlzU3RhdGljIiwiY29tcG9uZW50SWQiLCJiYXNlSGFzaCIsImJhc2VTdHlsZSIsImdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzIiwiaGFzaCIsIk5lIiwiaXNBcnJheSIsImllIiwiYWUiLCJjZSIsInBsdWdpbnMiLCJjb25jYXQiLCJsYXN0SW5kZXhPZiIsInJlZHVjZSIsInVlIiwibGUiLCJDb25zdW1lciIsImRlIiwiaGUiLCJwZSIsImZlIiwibWUiLCJ5ZSIsInN0eWxpc1BsdWdpbnMiLCJkaXNhYmxlQ1NTT01JbmplY3Rpb24iLCJkaXNhYmxlVmVuZG9yUHJlZml4ZXMiLCJQcm92aWRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJ2ZSIsImluamVjdCIsImlkIiwiZ2V0TmFtZSIsImdlIiwiU2UiLCJ3ZSIsIkVlIiwidG9Mb3dlckNhc2UiLCJiZSIsIl9lIiwiaXNSZWFjdENvbXBvbmVudCIsImlzQ3NzIiwiQWUiLCJDZSIsIlJlIiwidGhlbWUiLCJEZSIsImplIiwiVGUiLCJ4ZSIsImtlIiwiVmUiLCJCZSIsInplIiwiTWUiLCJHZSIsIkxlIiwiRmUiLCJZZSIsInFlIiwiYXR0cnMiLCJwYXJlbnRDb21wb25lbnRJZCIsImZpbHRlciIsInNob3VsZEZvcndhcmRQcm9wIiwiY29tcG9uZW50U3R5bGUiLCJkZWZhdWx0UHJvcHMiLCJmb2xkZWRDb21wb25lbnRJZHMiLCIkYXMiLCJhcyIsInN0eWxlIiwiY2xhc3NOYW1lIiwicmVmIiwid2l0aENvbXBvbmVudCIsImRlZmluZVByb3BlcnR5IiwiX2ZvbGRlZERlZmF1bHRQcm9wcyIsIkhlIiwid2l0aENvbmZpZyIsIiRlIiwiY3JlYXRlU3R5bGVzIiwicmVtb3ZlU3R5bGVzIiwicmVuZGVyU3R5bGVzIiwiV2UiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VycmVudCIsIlVlIiwiSmUiLCJfZW1pdFNoZWV0Q1NTIiwiaW5zdGFuY2UiLCJnZXRTdHlsZVRhZ3MiLCJzZWFsZWQiLCJnZXRTdHlsZUVsZW1lbnQiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIm5vbmNlIiwic2VhbCIsImNvbGxlY3RTdHlsZXMiLCJpbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW0iLCJYZSIsIlplIiwiS2UiLCJTdHlsZVNoZWV0IiwibWFzdGVyU2hlZXQiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/464.js b/server-data/resources/[phone]/npwd_crypto/web/dist/464.js deleted file mode 100644 index a647d666d..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/464.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[464],{9464:(n,e,i)=>{i.r(e);var o,t,r=i(2950),p=i.n(r),d=i(2181),l=i.n(d),x=(i(5475),i(5662),i(3839)),a=i.n(x),c=i(6501),u=(i(4810),i(245),i(3971),i(1551),i(8087),i(2072),i(246),i(7951),i(2453),i(5210),i(9085),i(7030),i(3377),function(n,e){return Object.defineProperty?Object.defineProperty(n,"raw",{value:e}):n.raw=e,n});a()(c.Z)(o||(o=u(["\n flex: 1;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n max-height: 100%;\n"],["\n flex: 1;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n max-height: 100%;\n"]))),a().div(t||(t=u(["\n flex: 1;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: 1.5rem;\n max-height: calc(100% - 7.5rem);\n"],["\n flex: 1;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: 1.5rem;\n max-height: calc(100% - 7.5rem);\n"]))),i.p,i(5142);var b,s,f,g=i(6038),h=function(n,e){return Object.defineProperty?Object.defineProperty(n,"raw",{value:e}):n.raw=e,n};a().div(b||(b=h(["\n position: relative;\n width: 500px;\n height: 1000px;\n"],["\n position: relative;\n width: 500px;\n height: 1000px;\n"]))),a().div(s||(s=h(["\n background: url(",");\n position: absolute;\n z-index: 100;\n width: 500px;\n height: 1000px;\n pointer-events: none;\n"],["\n background: url(",");\n position: absolute;\n z-index: 100;\n width: 500px;\n height: 1000px;\n pointer-events: none;\n"])),(function(n){return n.src})),a().div(f||(f=h(["\n z-index: 2;\n position: absolute;\n bottom: 100px;\n left: 50px;\n right: 50px;\n top: 100px;\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n border-radius: 20px;\n"],["\n z-index: 2;\n position: absolute;\n bottom: 100px;\n left: 50px;\n right: 50px;\n top: 100px;\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: cover;\n background-repeat: no-repeat;\n border-radius: 20px;\n"]))),(0,g.Z)({palette:{mode:"light"}}),l().render(p().createElement((function(){return null}),null),document.getElementById("root"))}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY0LmpzIiwibWFwcGluZ3MiOiJvSEErRElBLEVBQWtCQyxFLHFGQS9EbEJDLEcsc0dBQThELFNBQVVDLEVBQVFDLEdBRWhGLE9BRElDLE9BQU9DLGVBQWtCRCxPQUFPQyxlQUFlSCxFQUFRLE1BQU8sQ0FBRUksTUFBT0gsSUFBaUJELEVBQU9DLElBQU1BLEVBQ2xHRCxJQTZCSyxJQUFPSyxFQUFBLEVBQVAsQ0FBY1IsSUFBcUJBLEVBQW1CRSxFQUFxQixDQUFDLCtHQUFnSCxDQUFDLGtIQUMvTCxRQUFXRCxJQUFxQkEsRUFBbUJDLEVBQXFCLENBQUMsa0pBQW1KLENBQUMscUpDaEM1TixJLFlDc0RYLEVBQWtCLEVBQWtCTyxFLFVBdERwQyxFQUE4RCxTQUFVTixFQUFRQyxHQUVoRixPQURJQyxPQUFPQyxlQUFrQkQsT0FBT0MsZUFBZUgsRUFBUSxNQUFPLENBQUVJLE1BQU9ILElBQWlCRCxFQUFPQyxJQUFNQSxFQUNsR0QsR0FhSyxRQUFXLElBQXFCLEVBQW1CLEVBQXFCLENBQUMsaUVBQWtFLENBQUMsb0VBQzNJLFFBQVcsSUFBcUIsRUFBbUIsRUFBcUIsQ0FBQyx1QkFBd0IsNkdBQThHLENBQUMsdUJBQXdCLGdIQUFnSCxTQUFVTyxHQUUvVyxPQURVQSxFQUFHQyxPQUdFLFFBQVdGLElBQXFCQSxFQUFtQixFQUFxQixDQUFDLDZRQUE4USxDQUFDLGlSQWdCL1YsRUFBQUcsRUFBQSxHQUFZLENBQ3BCQyxRQUFTLENBQ0xDLEtBQU0sV0FlZCxXQUFnQixtQkFaTCxXQUVILE9BQU8sT0FVMkIsTUFBT0MsU0FBU0MsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL0FwcC50c3giLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9zcmMvYmcucG5nIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19tYWtlVGVtcGxhdGVPYmplY3QgPSAodGhpcyAmJiB0aGlzLl9fbWFrZVRlbXBsYXRlT2JqZWN0KSB8fCBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICAgIHJldHVybiBjb29rZWQ7XG59O1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBOdWlQcm92aWRlciB9IGZyb20gJ3JlYWN0LWZpdmVtLWhvb2tzJztcbmltcG9ydCB7IFJvdXRlLCBTd2l0Y2ggfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgU3R5bGVkRW5naW5lUHJvdmlkZXIsIFR5cG9ncmFwaHksIFBhcGVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJy4vY29tcG9uZW50cy9OYXZCYXInO1xuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9jb21wb25lbnRzL0hlYWRlclwiO1xuaW1wb3J0IHsgUG9ydGZvbGlvIH0gZnJvbSBcIi4vdmlld3MvUG9ydGZvbGlvXCI7XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSBcIi4vdmlld3MvSGlzdG9yeVwiO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25zIH0gZnJvbSBcIi4vdmlld3MvVHJhbnNhY3Rpb25zXCI7XG5pbXBvcnQgVGhlbWVTd2l0Y2hQcm92aWRlciBmcm9tIFwiLi9UaGVtZVN3aXRjaFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBSZWNvaWxSb290LCB1c2VTZXRSZWNvaWxTdGF0ZSB9IGZyb20gXCJyZWNvaWxcIjtcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSBcIi4vYXRvbXMvYXBwLWF0b21zXCI7XG5pbXBvcnQgZmV0Y2hOdWkgZnJvbSBcIi4vdXRpbHMvZmV0Y2hOdWlcIjtcbmltcG9ydCBTbmFja2JhclByb3ZpZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvc25hY2tiYXIvU25hY2tiYXJQcm92aWRlclwiO1xuaW1wb3J0IHsgUGhvbmVTbmFja2JhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvc25hY2tiYXIvUGhvbmVTbmFja2JhclwiO1xudmFyIENvbnRhaW5lciA9IHN0eWxlZChQYXBlcikodGVtcGxhdGVPYmplY3RfMSB8fCAodGVtcGxhdGVPYmplY3RfMSA9IF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtcIlxcbiAgZmxleDogMTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG1heC1oZWlnaHQ6IDEwMCU7XFxuXCJdLCBbXCJcXG4gIGZsZXg6IDE7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcblwiXSkpKTtcbnZhciBDb250ZW50ID0gc3R5bGVkLmRpdih0ZW1wbGF0ZU9iamVjdF8yIHx8ICh0ZW1wbGF0ZU9iamVjdF8yID0gX19tYWtlVGVtcGxhdGVPYmplY3QoW1wiXFxuICBmbGV4OiAxO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcGFkZGluZzogMS41cmVtO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNy41cmVtKTtcXG5cIl0sIFtcIlxcbiAgZmxleDogMTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHBhZGRpbmc6IDEuNXJlbTtcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDcuNXJlbSk7XFxuXCJdKSkpO1xudmFyIEFwcCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBzZXRWYWx1ZSA9IHVzZVNldFJlY29pbFN0YXRlKHN0YXRlLmN1cnJlbnRWYWx1ZSk7XG4gICAgdmFyIHNldEhpc3RvcnkgPSB1c2VTZXRSZWNvaWxTdGF0ZShzdGF0ZS5oaXN0b3J5KTtcbiAgICB2YXIgc2V0QmFsYW5jZSA9IHVzZVNldFJlY29pbFN0YXRlKHN0YXRlLmJhbGFuY2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZldGNoTnVpKCducHdkX2NyeXB0bzpmZXRjaERhdGEnKS50aGVuKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIGhpc3RvcnkgPSBfYS5oaXN0b3J5LCB2YWx1ZSA9IF9hLnZhbHVlLCBiYWxhbmNlID0gX2EuYmFsYW5jZTtcbiAgICAgICAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHNldEhpc3RvcnkoaGlzdG9yeSk7XG4gICAgICAgICAgICBzZXRCYWxhbmNlKGJhbGFuY2UpO1xuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEVuZ2luZVByb3ZpZGVyLCB7IGluamVjdEZpcnN0OiB0cnVlIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVTd2l0Y2hQcm92aWRlciwgeyBtb2RlOiBwcm9wcy50aGVtZS5wYWxldHRlLm1vZGUgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGhvbmVTbmFja2JhciwgbnVsbCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRlciwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUeXBvZ3JhcGh5LCB7IGZvbnRTaXplOiAyNCwgZm9udFdlaWdodDogXCJib2xkXCIgfSwgXCJDcnlwdG9cIikpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7IHBhdGg6IFwiL2NyeXB0b1wiLCBleGFjdDogdHJ1ZSwgY29tcG9uZW50OiBQb3J0Zm9saW8gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7IHBhdGg6IFwiL2NyeXB0by9oaXN0b3J5XCIsIGNvbXBvbmVudDogSGlzdG9yeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGUsIHsgcGF0aDogXCIvY3J5cHRvL3RyYW5zYWN0aW9uc1wiLCBjb21wb25lbnQ6IFRyYW5zYWN0aW9ucyB9KSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2QmFyLCBudWxsKSkpKSk7XG59O1xudmFyIFdpdGhQcm92aWRlcnMgPSBmdW5jdGlvbiAocHJvcHMpIHsgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlY29pbFJvb3QsIG51bGwsXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChOdWlQcm92aWRlciwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTbmFja2JhclByb3ZpZGVyLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBcHAsIF9fYXNzaWduKHt9LCBwcm9wcykpKSkpKTsgfTtcbmV4cG9ydCBkZWZhdWx0IFdpdGhQcm92aWRlcnM7XG52YXIgdGVtcGxhdGVPYmplY3RfMSwgdGVtcGxhdGVPYmplY3RfMjtcbiIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCI2NmY2NGMzOTFkZWUxODkzNWVhZjkxNmRkZWMwMTAyYy5wbmdcIjsiLCJ2YXIgX19tYWtlVGVtcGxhdGVPYmplY3QgPSAodGhpcyAmJiB0aGlzLl9fbWFrZVRlbXBsYXRlT2JqZWN0KSB8fCBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICAgIHJldHVybiBjb29rZWQ7XG59O1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0ICcuLi9ucHdkLmNvbmZpZyc7XG5pbXBvcnQgeyBCcm93c2VyUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAnO1xuaW1wb3J0IGltYWdlIGZyb20gJy4vYmcucG5nJztcbmltcG9ydCB7IE51aVByb3ZpZGVyIH0gZnJvbSAncmVhY3QtZml2ZW0taG9va3MnO1xuaW1wb3J0IHsgUmVjb2lsUm9vdCB9IGZyb20gJ3JlY29pbCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbnZhciBDb250YWluZXIgPSBzdHlsZWQuZGl2KHRlbXBsYXRlT2JqZWN0XzEgfHwgKHRlbXBsYXRlT2JqZWN0XzEgPSBfX21ha2VUZW1wbGF0ZU9iamVjdChbXCJcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiA1MDBweDtcXG4gIGhlaWdodDogMTAwMHB4O1xcblwiXSwgW1wiXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogNTAwcHg7XFxuICBoZWlnaHQ6IDEwMDBweDtcXG5cIl0pKSk7XG52YXIgQmFja2dyb3VuZCA9IHN0eWxlZC5kaXYodGVtcGxhdGVPYmplY3RfMiB8fCAodGVtcGxhdGVPYmplY3RfMiA9IF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtcIlxcbiAgYmFja2dyb3VuZDogdXJsKFwiLCBcIik7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6LWluZGV4OiAxMDA7XFxuICB3aWR0aDogNTAwcHg7XFxuICBoZWlnaHQ6IDEwMDBweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcblwiXSwgW1wiXFxuICBiYWNrZ3JvdW5kOiB1cmwoXCIsIFwiKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwMDtcXG4gIHdpZHRoOiA1MDBweDtcXG4gIGhlaWdodDogMTAwMHB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXCJdKSksIGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzcmMgPSBfYS5zcmM7XG4gICAgcmV0dXJuIHNyYztcbn0pO1xudmFyIEFwcENvbnRhaW5lciA9IHN0eWxlZC5kaXYodGVtcGxhdGVPYmplY3RfMyB8fCAodGVtcGxhdGVPYmplY3RfMyA9IF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtcIlxcbiAgei1pbmRleDogMjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMTAwcHg7XFxuICBsZWZ0OiA1MHB4O1xcbiAgcmlnaHQ6IDUwcHg7XFxuICB0b3A6IDEwMHB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XFxuXCJdLCBbXCJcXG4gIHotaW5kZXg6IDI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDEwMHB4O1xcbiAgbGVmdDogNTBweDtcXG4gIHJpZ2h0OiA1MHB4O1xcbiAgdG9wOiAxMDBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXItcmFkaXVzOiAyMHB4O1xcblwiXSkpKTtcbi8vIERlZmF1bHQgc2V0dGluZ3Mgd2lsbCBjb21lIGZyb20gcGFja2FnZS4gVGhpcyBpcyBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMuXG52YXIgc2V0dGluZ3MgPSB7XG4gICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgbGFiZWw6ICdFbmdsaXNoJyxcbiAgICAgICAgdmFsdWU6ICdlbicsXG4gICAgfSxcbiAgICB0aGVtZToge1xuICAgICAgICBsYWJlbDogJ1RoZW1lIG5hbWUnLFxuICAgICAgICB2YWx1ZTogJ3RoZW1lLW5hbWUnLFxuICAgIH0sXG59O1xuLypcbiAqICAgUHJvdmlkZXJzIGxvYWRlZCBoZXJlIHdpbGwgb25seSBiZSBhcHBsaWVkIHRvIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAqICAgSWYgeW91IHdhbnQgdG8gYWRkIG1vcmUgcHJvdmlkZXJzIHRvIHRoZSBhY3R1YWwgYXBwIGluc2lkZSBOUFdEIHlvdSBoYXZlIHRvIGFkZCB0aGVtIGluIEFQUC50c3guXG4gKi9cbnZhciB0aGVtZSA9IGNyZWF0ZVRoZW1lKHtcbiAgICBwYWxldHRlOiB7XG4gICAgICAgIG1vZGU6ICdsaWdodCcsXG4gICAgfSxcbn0pO1xudmFyIFJvb3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9JTl9HQU1FKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnJvd3NlclJvdXRlciwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZWNvaWxSb290LCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChOdWlQcm92aWRlciwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCYWNrZ3JvdW5kLCB7IHNyYzogaW1hZ2UgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwQ29udGFpbmVyLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBcHAsIHsgc2V0dGluZ3M6IHNldHRpbmdzLCBpMThuOiBpMThuZXh0LCB0aGVtZTogdGhlbWUgfSkpKSkpKSk7XG59O1xuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm9vdCwgbnVsbCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290JykpO1xudmFyIHRlbXBsYXRlT2JqZWN0XzEsIHRlbXBsYXRlT2JqZWN0XzIsIHRlbXBsYXRlT2JqZWN0XzM7XG4iXSwibmFtZXMiOlsidGVtcGxhdGVPYmplY3RfMSIsInRlbXBsYXRlT2JqZWN0XzIiLCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsImNvb2tlZCIsInJhdyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJQYXBlciIsInRlbXBsYXRlT2JqZWN0XzMiLCJfYSIsInNyYyIsImNyZWF0ZVRoZW1lIiwicGFsZXR0ZSIsIm1vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/48.js b/server-data/resources/[phone]/npwd_crypto/web/dist/48.js deleted file mode 100644 index 872360c26..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/48.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[48],{5826:n=>{n.exports=Array.isArray||function(n){return"[object Array]"==Object.prototype.toString.call(n)}},2703:(n,t,e)=>{"use strict";var r=e(414);function o(){}function i(){}i.resetWarningCache=o,n.exports=function(){function n(n,t,e,o,i,a){if(a!==r){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return n}n.isRequired=n;var e={array:n,bigint:n,bool:n,func:n,number:n,object:n,string:n,symbol:n,any:n,arrayOf:t,element:n,elementType:n,instanceOf:t,node:n,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return e.PropTypes=e,e}},5697:(n,t,e)=>{n.exports=e(2703)()},414:n=>{"use strict";n.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},6048:(n,t,e)=>{"use strict";e.r(t),e.d(t,{BrowserRouter:()=>xn,HashRouter:()=>En,Link:()=>Rn,MemoryRouter:()=>G,NavLink:()=>Ln,Prompt:()=>z,Redirect:()=>tn,Route:()=>an,Router:()=>J,StaticRouter:()=>pn,Switch:()=>hn,generatePath:()=>nn,matchPath:()=>on,useHistory:()=>mn,useLocation:()=>yn,useParams:()=>gn,useRouteMatch:()=>wn,withRouter:()=>dn});var r=e(4578),o=e(2950),i=e.n(o);function a(){return a=Object.assign||function(n){for(var t=1;t=0;p--){var h=o[p];"."===h?u(o,p):".."===h?(u(o,p),f++):f&&(u(o,p),f--)}if(!s)for(;f--;f)o.unshift("..");!s||""===o[0]||o[0]&&c(o[0])||o.unshift("");var d=o.join("/");return e&&"/"!==d.substr(-1)&&(d+="/"),d}(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function g(){var n=null,t=[];return{setPrompt:function(t){return n=t,function(){n===t&&(n=null)}},confirmTransitionTo:function(t,e,r,o){if(null!=n){var i="function"==typeof n?n(t,e):n;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(n){var e=!0;function r(){e&&n.apply(void 0,arguments)}return t.push(r),function(){e=!1,t=t.filter((function(n){return n!==r}))}},notifyListeners:function(){for(var n=arguments.length,e=new Array(n),r=0;rt?e.splice(t,e.length-t,o):e.push(o),f({action:r,location:o,index:t,entries:e})}}))},replace:function(n,t){var r="REPLACE",o=y(n,t,p(),x.location);l.confirmTransitionTo(o,r,e,(function(n){n&&(x.entries[x.index]=o,f({action:r,location:o}))}))},go:w,goBack:function(){w(-1)},goForward:function(){w(1)},canGo:function(n){var t=x.index+n;return t>=0&&t{var r=e(5826);n.exports=function n(t,e,o){return r(e)||(o=e||o,e=[]),o=o||{},t instanceof RegExp?function(n,t){var e=n.source.match(/\((?!\?)/g);if(e)for(var r=0;r{function s(){}i.r(e),i.d(e,{Animation:()=>mi,Animations:()=>xi,ArcElement:()=>vn,BarController:()=>Bi,BarElement:()=>Fn,BasePlatform:()=>Cs,BasicPlatform:()=>Os,BubbleController:()=>Wi,CategoryScale:()=>Po,Chart:()=>pn,DatasetController:()=>Ai,Decimation:()=>Nn,DomPlatform:()=>js,DoughnutController:()=>Ni,Element:()=>Ui,Filler:()=>so,Interaction:()=>ps,Legend:()=>ao,LineController:()=>Hi,LineElement:()=>On,LinearScale:()=>Oo,LogarithmicScale:()=>To,PieController:()=>$i,PointElement:()=>Tn,PolarAreaController:()=>ji,RadarController:()=>Yi,RadialLinearScale:()=>Vo,Scale:()=>is,ScatterController:()=>os,SubTitle:()=>co,Ticks:()=>qi,TimeScale:()=>Uo,TimeSeriesScale:()=>qo,Title:()=>lo,Tooltip:()=>ko,_adapters:()=>hs,_detectPlatform:()=>$s,animator:()=>fi,controllers:()=>as,defaults:()=>Zt,elements:()=>Vn,layouts:()=>Ds,plugins:()=>So,registerables:()=>Go,registry:()=>ns,scales:()=>Ko});const n=function(){let t=0;return function(){return t++}}();function o(t){return null==t}function a(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function r(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}const l=t=>("number"==typeof t||t instanceof Number)&&isFinite(+t);function h(t,e){return l(t)?t:e}function c(t,e){return void 0===t?e:t}const d=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function u(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function f(t,e,i,s){let n,o,l;if(a(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function M(t,e){const i=v[e]||(v[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0},D=Math.PI,C=2*D,O=C+D,A=Number.POSITIVE_INFINITY,T=D/180,L=D/2,E=D/4,R=2*D/3,I=Math.log10,z=Math.sign;function F(t){const e=Math.round(t);t=B(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(I(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function V(t){return!isNaN(parseFloat(t))&&isFinite(t)}function B(t,e,i){return Math.abs(t-e)l&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Z(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const J=(t,e,i,s)=>Z(t,i,s?s=>t[s][e]<=i:s=>t[s][e]Z(t,i,(s=>t[s][e]>=i)),tt=["push","pop","shift","splice","unshift"];function et(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(tt.forEach((e=>{delete t[e]})),delete t._chartjs)}function it(t){const e=new Set;let i,s;for(i=0,s=t.length;iArray.prototype.slice.call(t));let n=!1,o=[];return function(...i){o=s(i),n||(n=!0,st.call(window,(()=>{n=!1,t.apply(e,o)})))}}const ot=t=>"start"===t?"left":"end"===t?"right":"center",at=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2;function rt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=K(Math.min(J(r,a.axis,h).lo,i?s:J(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?K(Math.max(J(r,a.axis,c,!0).hi+1,i?0:J(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function lt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const ht=t=>0===t||1===t,ct=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*C/i),dt=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*C/i)+1,ut={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*L),easeOutSine:t=>Math.sin(t*L),easeInOutSine:t=>-.5*(Math.cos(D*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ht(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ht(t)?t:ct(t,.075,.3),easeOutElastic:t=>ht(t)?t:dt(t,.075,.3),easeInOutElastic(t){const e=.1125;return ht(t)?t:t<.5?.5*ct(2*t,e,.45):.5+.5*dt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-ut.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*ut.easeInBounce(2*t):.5*ut.easeOutBounce(2*t-1)+.5};function ft(t){return t+.5|0}const gt=(t,e,i)=>Math.max(Math.min(t,i),e);function pt(t){return gt(ft(2.55*t),0,255)}function mt(t){return gt(ft(255*t),0,255)}function bt(t){return gt(ft(t/2.55)/100,0,1)}function xt(t){return gt(ft(100*t),0,100)}const _t={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},yt=[..."0123456789ABCDEF"],vt=t=>yt[15&t],Mt=t=>yt[(240&t)>>4]+yt[15&t],wt=t=>(240&t)>>4==(15&t);const kt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function St(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Pt(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Dt(t,e,i){const s=St(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function Ct(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(et<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ft=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Vt(t,e,i){if(t){let s=Ct(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=At(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function Bt(t,e){return t?Object.assign(e||{},t):t}function Wt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=mt(t[3]))):(e=Bt(t,{r:0,g:0,b:0,a:1})).a=mt(e.a),e}function Nt(t){return"r"===t.charAt(0)?function(t){const e=It.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?pt(t):gt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?pt(i):gt(i,0,255)),s=255&(e[4]?pt(s):gt(s,0,255)),n=255&(e[6]?pt(n):gt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):function(t){const e=kt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?pt(+e[5]):mt(+e[5]));const n=Tt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return Ot(Dt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return Ot(Pt,t,e,i)}(n,o,a):At(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}(t)}class Ht{constructor(t){if(t instanceof Ht)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Wt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*_t[s[1]],g:255&17*_t[s[2]],b:255&17*_t[s[3]],a:5===o?17*_t[s[4]]:255}:7!==o&&9!==o||(n={r:_t[s[1]]<<4|_t[s[2]],g:_t[s[3]]<<4|_t[s[4]],b:_t[s[5]]<<4|_t[s[6]],a:9===o?_t[s[7]]<<4|_t[s[8]]:255})),i=n||function(t){Rt||(Rt=function(){const t={},e=Object.keys(Et),i=Object.keys(Lt);let s,n,o,a,r;for(s=0;s>16&255,o>>8&255,255&o]}return t}(),Rt.transparent=[0,0,0,0]);const e=Rt[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}(t)||Nt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=Bt(this._rgb);return t&&(t.a=bt(t.a)),t}set rgb(t){this._rgb=Wt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${bt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?(t=this._rgb,e=(t=>wt(t.r)&&wt(t.g)&&wt(t.b)&&wt(t.a))(t)?vt:Mt,t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0):void 0;var t,e}hslString(){return this._valid?function(t){if(!t)return;const e=Ct(t),i=e[0],s=xt(e[1]),n=xt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${bt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ft(bt(t.r)),n=Ft(bt(t.g)),o=Ft(bt(t.b));return{r:mt(zt(s+i*(Ft(bt(e.r))-s))),g:mt(zt(n+i*(Ft(bt(e.g))-n))),b:mt(zt(o+i*(Ft(bt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Ht(this.rgb)}alpha(t){return this._rgb.a=mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=ft(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Vt(this._rgb,2,t),this}darken(t){return Vt(this._rgb,2,-t),this}saturate(t){return Vt(this._rgb,1,t),this}desaturate(t){return Vt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=Ct(t);i[0]=Tt(i[0]+e),i=At(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function jt(t){return new Ht(t)}function $t(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Yt(t){return $t(t)?t:jt(t)}function Ut(t){return $t(t)?t:jt(t).saturate(.5).darken(.1).hexString()}const Xt=Object.create(null),qt=Object.create(null);function Kt(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>Ut(e.backgroundColor),this.hoverBorderColor=(t,e)=>Ut(e.borderColor),this.hoverColor=(t,e)=>Ut(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return Gt(this,t,e)}get(t){return Kt(this,t)}describe(t,e){return Gt(qt,t,e)}override(t,e){return Gt(Xt,t,e)}route(t,e,i,s){const n=Kt(this,t),o=Kt(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return r(t)?Object.assign({},e,t):c(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function Jt(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Qt(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function ne(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),o(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;cc(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function me(t){return pe(t,{top:"y",right:"x",bottom:"y",left:"x"})}function be(t){return pe(t,["topLeft","topRight","bottomLeft","bottomRight"])}function xe(t){const e=me(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function _e(t,e){t=t||{},e=e||Zt.font;let i=c(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=c(t.style,e.style);s&&!(""+s).match(fe)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:c(t.family,e.family),lineHeight:ge(c(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:c(t.weight,e.weight),string:""};return n.string=function(t){return!t||o(t.size)||o(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function ye(t,e,i,s){let n,o,r,l=!0;for(n=0,o=t.length;nt[0])){k(s)||(s=Ee("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>Me([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>De(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Ee(Se(o,t),i),k(n))return Pe(t,n)?Te(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Re(t).includes(e),ownKeys:t=>Re(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function we(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:ke(t,s),setContext:e=>we(t,e,i,s),override:n=>we(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>De(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:l}=t;let h=s[e];return S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);return r.add(t),e=e(o,a||s),r.delete(t),Pe(t,e)&&(e=Te(n._scopes,n,t,e)),e}(e,h,t,i)),a(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:l}=i;if(k(o.index)&&s(t))e=e[o.index%e.length];else if(r(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const r of i){const i=Te(s,n,t,r);e.push(we(i,o,a&&a[t],l))}}return e}(e,h,t,l.isIndexable)),Pe(e,h)&&(h=we(h,n,o&&o[e],l)),h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function ke(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Se=(t,e)=>t?t+w(e):e,Pe=(t,e)=>r(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function De(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ce(t,e,i){return S(t)?t(e,i):t}const Oe=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ae(t,e,i,s,n){for(const o of e){const e=Oe(i,o);if(e){t.add(e);const o=Ce(e._fallback,i,n);if(k(o)&&o!==i&&o!==s)return o}else if(!1===e&&k(s)&&i!==s)return null}return!1}function Te(t,e,i,s){const n=e._rootScopes,o=Ce(e._fallback,i,s),l=[...t,...n],h=new Set;h.add(s);let c=Le(h,l,i,o||i,s);return null!==c&&(!k(o)||o===i||(c=Le(h,l,o,c,s),null!==c))&&Me(Array.from(h),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];return a(n)&&r(i)?i:n}(e,i,s)))}function Le(t,e,i,s,n){for(;i;)i=Ae(t,e,i,s,n);return i}function Ee(t,e){for(const i of e){if(!i)continue;const e=i[t];if(k(e))return e}}function Re(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function Ie(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function Be(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Y(o,n),l=Y(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function We(t,e,i){return Math.max(Math.min(t,i),e)}function Ne(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)!function(t,e="x"){const i=Ve(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=Fe(t,0);for(a=0;awindow.getComputedStyle(t,null),Ue=["top","right","bottom","left"];function Xe(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=Ue[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function qe(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=Ye(i),o="border-box"===n.boxSizing,a=Xe(n,"padding"),r=Xe(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Ke=t=>Math.round(10*t)/10;function Ge(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n/s,t.width=o/s;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Ze=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Je(t,e){const i=function(t,e){return Ye(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Qe(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function ti(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function ei(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=Qe(t,n,i),r=Qe(n,o,i),l=Qe(o,e,i),h=Qe(a,r,i),c=Qe(r,l,i);return Qe(h,c,i)}const ii=new Map;function si(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=ii.get(i);return s||(s=new Intl.NumberFormat(t,e),ii.set(i,s)),s}(e,i).format(t)}function ni(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function oi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function ai(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function ri(t){return"angle"===t?{between:q,compare:U,normalize:X}:{between:G,compare:(t,e)=>t-e,normalize:t=>t}}function li({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function hi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=ri(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=ri(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hs({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=st.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}};const gi="transparent",pi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Yt(t||gi),n=s.valid&&Yt(e||gi);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class mi{constructor(t,e,i,s){const n=e[i];s=ye([t.to,s,n,t.from]);const o=ye([t.from,n,s]);this._active=!0,this._fn=t.fn||pi[t.type||typeof o],this._easing=ut[t.easing]||ut.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=ye([t.to,e,s,t.from]),this._from=ye([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),Zt.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),Zt.describe("animations",{_fallback:"animation"}),Zt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}});class xi{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!r(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!r(s))return;const n={};for(const t of bi)n[t]=s[t];(a(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(i)return i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}})),i;t.options=e}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new mi(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(fi.add(this._chart,i),!0):void 0}}function _i(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function yi(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Si(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Di(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const Ci=t=>"reset"===t||"none"===t,Oi=(t,e)=>e?t:Object.assign({},t);class Ai{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Mi(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Di(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=c(i.xAxisID,Pi(t,"x")),o=e.yAxisID=c(i.yAxisID,Pi(t,"y")),a=e.rAxisID=c(i.rAxisID,Pi(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&et(this._data,this),t._stacked&&Di(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(r(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s{const e="_onData"+w(t),i=s[t];Object.defineProperty(s,t,{configurable:!0,enumerable:!1,value(...t){const n=i.apply(this,t);return s._chartjs.listeners.forEach((i=>{"function"==typeof i[e]&&i[e](...t)})),n}})})))),this._syncList=[],this._data=e}var s}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Mi(e.vScale,e),e.stack!==i.stack&&(s=!0,Di(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Si(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,l=n.axis;let h,c,d,u=0===t&&e===s.length||i._sorted,f=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=a(s[t])?this.parseArrayData(i,s,t,e):r(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:yi(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let u,f;function g(){f=s[u];const e=f[a.axis];return!l(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,r);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Oi(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new xi(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ci(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Ci(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ci(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Ei(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.baset.controller.options.grouped)),n=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),s=i&&i[t.vScale.axis];if(o(s)||isNaN(s))return!0};for(const i of s)if((void 0===e||!r(i))&&((!1===n||-1===a.indexOf(i.stack)||void 0===n&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(d,e,a)*n,u===a&&(m-=d/2);const t=e.getPixelForDecimal(0),i=e.getPixelForDecimal(1),s=Math.min(t,i),o=Math.max(t,i);m=Math.max(Math.min(m,o),s),c=m+d}if(m===e.getPixelForValue(a)){const t=z(d)*e.getLineWidthForValue(a)/2;m+=t,d-=t}return{size:d,base:m,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,a=c(s.maxBarThickness,1/0);let r,l;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,h="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:"("+o+", "+a+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d""}}}};class Ni extends Ai{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(r(i[t])){const{key:t="value"}=this._parsing;a=e=>+M(i[e],t)}for(n=t,o=t+e;nq(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>q(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(L,c,u),b=g(D,h,d),x=g(D+L,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(f,u,r),x=(i.width-o)/g,_=(i.height-o)/p,y=Math.max(Math.min(x,_)/2,0),v=d(this.options.radius,y),M=(v-Math.max(v*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=m*v,this.offsetY=b*v,s.total=this.calculateTotal(),this.outerRadius=v-M*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-M*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/C)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?C*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=si(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s"spacing"!==t,_indexable:t=>"spacing"!==t},Ni.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label(t){let e=t.label;const i=": "+t.formattedValue;return a(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class Hi extends Ai{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=rt(e,s,o);this._drawStart=a,this._drawCount=r,lt(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(e,s),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=V(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||n||"none"===s;let x=e>0&&this.getParsed(e-1);for(let g=e;g0&&Math.abs(i[u]-x[u])>m,p&&(_.parsed=i,_.raw=h.data[g]),d&&(_.options=c||this.resolveDataElementOptions(g,e.active?"active":s)),b||this.updateElement(e,g,_,s),x=i}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}Hi.id="line",Hi.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},Hi.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class ji extends Ai{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=si(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return Ie.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*D;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?N(this.resolveDataElementOptions(t,e).angle||i):0}}ji.id="polarArea",ji.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},ji.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label:t=>t.chart.data.labels[t.dataIndex]+": "+t.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class $i extends Ni{}$i.id="pie",$i.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Yi extends Ai{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return Ie.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Ui.defaults={},Ui.defaultRoutes=void 0;const Xi={values:t=>a(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;return Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t)),i}(t,i)}const a=I(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),si(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=t/Math.pow(10,Math.floor(I(t)));return 1===s||2===s||5===s?Xi.numeric.call(this,t,e,i):""}};var qi={formatters:Xi};function Ki(t,e,i,s,n){const o=c(s,0),a=Math.min(c(n,t.length),t.length);let r,l,h,d=0;for(i=Math.ceil(i),n&&(r=n-s,i=r/Math.floor(r/i)),h=o;h<0;)d++,h=Math.round(o+d*i);for(l=Math.max(o,0);le.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:qi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),Zt.route("scale.ticks","color","","color"),Zt.route("scale.grid","color","","borderColor"),Zt.route("scale.grid","borderColor","","borderColor"),Zt.route("scale.title","color","","color"),Zt.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t}),Zt.describe("scales",{_fallback:"scale"}),Zt.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t});const Gi=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i;function Zi(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Qi(t){return t.drawTicks?t.tickLength:0}function ts(t,e){if(!t.display)return 0;const i=_e(t.font,e),s=xe(t.padding);return(a(t.text)?t.text.length:1)*i.lineHeight+s.height}function es(t,e,i){let s=ot(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class is extends Ui{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=h(t,Number.POSITIVE_INFINITY),e=h(e,Number.NEGATIVE_INFINITY),i=h(i,Number.POSITIVE_INFINITY),s=h(s,Number.NEGATIVE_INFINITY),{min:h(t,i),max:h(e,s),minDefined:l(t),maxDefined:l(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:h(i,h(s,i)),max:h(s,h(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){u(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=function(t,e,i){const{min:s,max:n}=t,o=d(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=rs)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nt-e)).pop(),e}(s);for(let t=0,e=o.length-1;tn)return e}return Math.max(n,1)}(n,e,s);if(a>0){let t,i;const s=a>1?Math.round((l-r)/(a-1)):null;for(Ki(e,h,c,o(s)?0:r-s,r),t=0,i=a-1;t=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=K(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Qi(t.grid)-e.padding-ts(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=H(Math.min(Math.asin(K((h.highest.height+6)/o,-1,1)),Math.asin(K(a/r,-1,1))-Math.asin(K(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){u(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){u(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=ts(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Qi(n)+o):(t.height=this.maxHeight,t.width=Qi(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=N(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){u(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:n[t]||0,height:r[t]||0});return{first:k(0),last:k(e-1),widest:k(M),highest:k(w),widths:n,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return K(this._alignToPixels?te(this.chart,e,0):e,-32768,32767)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,l=this.isHorizontal(),h=this.ticks.length+(a?1:0),d=Qi(n),u=[],f=n.setContext(this.getContext()),g=f.drawBorder?f.borderWidth:0,p=g/2,m=function(t){return te(i,t,g)};let b,x,_,y,v,M,w,k,S,P,D,C;if("top"===o)b=m(this.bottom),M=this.bottom-d,k=b-p,P=m(t.top)+p,C=t.bottom;else if("bottom"===o)b=m(this.top),P=t.top,C=m(t.bottom)-p,M=b+p,k=this.top+d;else if("left"===o)b=m(this.right),v=this.right-d,w=b-p,S=m(t.left)+p,D=t.right;else if("right"===o)b=m(this.left),S=t.left,D=m(t.right)-p,v=b+p,w=this.left+d;else if("x"===e){if("center"===o)b=m((t.top+t.bottom)/2+.5);else if(r(o)){const t=Object.keys(o)[0],e=o[t];b=m(this.chart.scales[t].getPixelForValue(e))}P=t.top,C=t.bottom,M=b+p,k=M+d}else if("y"===e){if("center"===o)b=m((t.left+t.right)/2);else if(r(o)){const t=Object.keys(o)[0],e=o[t];b=m(this.chart.scales[t].getPixelForValue(e))}v=b-p,w=v-d,S=t.left,D=t.right}const O=c(s.ticks.maxTicksLimit,h),A=Math.max(1,Math.ceil(h/O));for(x=0;xe.value===t));return i>=0?e.setContext(this.getContext(i)).lineWidth:0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");Zt.route(o,n,l,r)}))}(e,t.defaultRoutes),t.descriptors&&Zt.describe(e,t.descriptors)}(t,o,i),this.override&&Zt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in Zt[s]&&(delete Zt[s][i],this.override&&delete Xt[i])}}var ns=new class{constructor(){this.controllers=new ss(Ai,"datasets",!0),this.elements=new ss(Ui,"elements"),this.plugins=new ss(Object,"plugins"),this.scales=new ss(is,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):f(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);u(i["before"+s],[],i),e[t](i),u(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;e0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":s)),x||this.updateElement(e,c,p,s),_=i}this.updateSharedOptions(d,s,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}os.id="scatter",os.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1},os.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title:()=>"",label:t=>"("+t.label+", "+t.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var as=Object.freeze({__proto__:null,BarController:Bi,BubbleController:Wi,DoughnutController:Ni,LineController:Hi,PolarAreaController:ji,PieController:$i,RadarController:Yi,ScatterController:os});function rs(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class ls{constructor(t){this.options=t||{}}init(t){}formats(){return rs()}parse(t,e){return rs()}format(t,e){return rs()}add(t,e,i){return rs()}diff(t,e,i){return rs()}startOf(t,e,i){return rs()}endOf(t,e){return rs()}}ls.override=function(t){Object.assign(ls.prototype,t)};var hs={_date:ls};function cs(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?Q:J;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function ds(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var ps={evaluateInteractionItems:ds,modes:{index(t,e,i,s){const n=qe(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?us(t,n,o,s,a):fs(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=qe(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?us(t,n,o,s,a):fs(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tus(t,qe(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=qe(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return fs(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>gs(t,qe(e,t),"x",i.intersect,s),y:(t,e,i,s)=>gs(t,qe(e,t),"y",i.intersect,s)}};const ms=["left","top","right","bottom"];function bs(t,e){return t.filter((t=>t.pos===e))}function xs(t,e){return t.filter((t=>-1===ms.indexOf(t.pos)&&t.box.axis===e))}function _s(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function ys(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function vs(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Ms(t,e,i,s){const{pos:n,box:o}=i,a=t.maxPadding;if(!r(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?o.height:o.width),i.size=e.size/e.count,t[n]+=i.size}o.getPadding&&vs(a,o.getPadding());const l=Math.max(0,e.outerWidth-ys(a,t,"left","right")),h=Math.max(0,e.outerHeight-ys(a,t,"top","bottom")),c=l!==t.w,d=h!==t.h;return t.w=l,t.h=h,i.horizontal?{same:c,other:d}:{same:d,other:c}}function ws(t,e){const i=e.maxPadding;return function(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}(t?["left","right"]:["top","bottom"])}function ks(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=_s(bs(e,"left"),!0),n=_s(bs(e,"right")),o=_s(bs(e,"top"),!0),a=_s(bs(e,"bottom")),r=xs(e,"x"),l=xs(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:bs(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;f(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);vs(u,xe(s));const g=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),p=function(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!ms.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class Cs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Os extends Cs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const As={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ts=t=>null===t||""===t,Ls=!!Ze&&{passive:!0};function Es(t,e,i){t.canvas.removeEventListener(e,i,Ls)}function Rs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Is(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Rs(i.addedNodes,s),e=e&&!Rs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function zs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Rs(i.removedNodes,s),e=e&&!Rs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const Fs=new Map;let Vs=0;function Bs(){const t=window.devicePixelRatio;t!==Vs&&(Vs=t,Fs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Ws(t,e,i){const s=t.canvas,n=s&&je(s);if(!n)return;const o=nt(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){Fs.size||window.addEventListener("resize",Bs),Fs.set(t,e)}(t,o),a}function Ns(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){Fs.delete(t),Fs.size||window.removeEventListener("resize",Bs)}(t)}function Hs(t,e,i){const s=t.canvas,n=nt((e=>{null!==t.ctx&&i(function(t,e){const i=As[t.type]||t.type,{x:s,y:n}=qe(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Ls)}(s,e,n),n}class js extends Cs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ts(n)){const e=Je(t,"width");void 0!==e&&(t.width=e)}if(Ts(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Je(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];o(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Is,detach:zs,resize:Ws}[e]||Hs;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];s&&(({attach:Ns,detach:Ns,resize:Ns}[e]||Es)(t,e,s),i[e]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return function(t,e,i,s){const n=Ye(t),o=Xe(n,"margin"),a=$e(n.maxWidth,t,"clientWidth")||A,r=$e(n.maxHeight,t,"clientHeight")||A,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=je(t);if(o){const t=o.getBoundingClientRect(),a=Ye(o),r=Xe(a,"border","width"),l=Xe(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=$e(a.maxWidth,o,"clientWidth"),n=$e(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||A,maxHeight:n||A}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=Xe(n,"border","width"),e=Xe(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h/s):c-o.height),h=Ke(Math.min(h,a,l.maxWidth)),c=Ke(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Ke(h/2)),{width:h,height:c}}(t,e,i,s)}isAttached(t){const e=je(t);return!(!e||!e.isConnected)}}function $s(t){return!He()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Os:js}class Ys{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return"afterDestroy"===e&&(this._notify(n,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===u(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){o(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=c(i.options&&i.options.plugins,{}),n=function(t){const e={},i=[],s=Object.keys(ns.plugins.items);for(let t=0;tt.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Us(t,e){return e||!1!==t?!0===t?{}:t:null}function Xs(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function qs(t,e){const i=Zt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Ks(t,e){return"x"===t||"y"===t?t:e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.charAt(0).toLowerCase();var i}function Gs(t){const e=t.options||(t.options={});e.plugins=c(e.plugins,{}),e.scales=function(t,e){const i=Xt[t.type]||{scales:{}},s=e.scales||{},n=qs(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!r(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const l=Ks(t,e),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};o[l]=o[l]||t,a[t]=_(Object.create(null),[{axis:l},e,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||qs(n,e),l=(Xt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,r),n=i[e+"AxisID"]||o[e]||e;a[n]=a[n]||Object.create(null),_(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];_(e,[Zt.scales[e.type],Zt.scale])})),a}(t,e)}function Zs(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Js=new Map,Qs=new Set;function tn(t,e){let i=Js.get(t);return i||(i=e(),Js.set(t,i),Qs.add(i)),i}const en=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class sn{constructor(t){this._config=function(t){return(t=t||{}).data=Zs(t.data),Gs(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Zs(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Gs(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return tn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return tn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return tn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return tn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>en(r,t,e)))),e.forEach((t=>en(r,s,t))),e.forEach((t=>en(r,Xt[n]||{},t))),e.forEach((t=>en(r,Zt,t))),e.forEach((t=>en(r,qt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Qs.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,Xt[e]||{},Zt.datasets[e]||{},{type:e},Zt,qt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:r}=nn(this._resolverCache,t,s);let l=o;(function(t,e){const{isScriptable:i,isIndexable:s}=ke(t);for(const n of e){const e=i(n),o=s(n),r=(o||e)&&t[n];if(e&&(S(r)||on(r))||o&&a(r))return!0}return!1})(o,e)&&(n.$shared=!1,l=we(o,i=S(i)?i():i,this.createResolver(t,i,r)));for(const t of e)n[t]=l[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=nn(this._resolverCache,t,i);return r(e)?we(n,e,void 0,s):n}}function nn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);return o||(o={resolver:Me(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)),o}const on=t=>r(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1),an=["top","bottom","left","right","chartArea"];function rn(t,e){return"top"===t||"bottom"===t||-1===an.indexOf(t)&&"x"===e}function ln(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function hn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),u(i&&i.onComplete,[t],e)}function cn(t){const e=t.chart,i=e.options.animation;u(i&&i.onProgress,[t],e)}function dn(t){return He()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const un={},fn=t=>{const e=dn(t);return Object.values(un).filter((t=>t.canvas===e)).pop()};function gn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class pn{constructor(t,e){const i=this.config=new sn(e),s=dn(t),o=fn(s);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||$s(s)),this.platform.updateConfig(i);const r=this.platform.acquireContext(s,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=n(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ys,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=function(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],un[this.id]=this,r&&l?(fi.listen(this,"complete",hn),fi.listen(this,"progress",cn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return o(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Ge(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return ee(this.canvas,this.ctx),this}stop(){return fi.stop(this),this}resize(t,e){fi.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Ge(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),u(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){f(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Ks(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),f(n,(e=>{const n=e.options,o=n.id,a=Ks(o,n),r=c(n.type,e.dtype);void 0!==n.position&&rn(n.position,a)===rn(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;o in i&&i[o].type===r?l=i[o]:(l=new(ns.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l),l.init(n,t)})),f(s,((t,e)=>{t||delete i[e]})),f(i,(t=>{Ds.configure(this,t,t.options),Ds.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(ln("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){f(this.scales,(t=>{Ds.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e)gn(t,s,"_removeElements"===i?-n:n)}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;Ds.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],f(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&oe(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ae(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return ne(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=ps.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=ve(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),fi.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};f(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){f(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},f(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!g(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=function(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,u(n.onHover,[t,a,this],this),r&&u(n.onClick,[t,a,this],this));const h=!g(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const mn=()=>f(pn.instances,(t=>t._plugins.invalidate())),bn=!0;function xn(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+L,s-L),t.closePath(),t.clip()}function _n(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function yn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/D)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=function(t,e,i,s){const n=pe(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]),o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return K(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:K(n.innerStart,0,a),innerEnd:K(n.innerEnd,0,a)}}(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,C=u+v,O=m+y/P,A=b-v/C;if(t.beginPath(),o){if(t.arc(a,r,d,k,S),_>0){const e=_n(w,S,a,r);t.arc(e.x,e.y,_,S,b+L)}const e=_n(C,b,a,r);if(t.lineTo(e.x,e.y),v>0){const e=_n(C,A,a,r);t.arc(e.x,e.y,v,b+L,A+Math.PI)}if(t.arc(a,r,u,b-v/u,m+y/u,!0),y>0){const e=_n(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-L)}const i=_n(M,m,a,r);if(t.lineTo(i.x,i.y),x>0){const e=_n(M,k,a,r);t.arc(e.x,e.y,x,m-L,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}Object.defineProperties(pn,{defaults:{enumerable:bn,value:Zt},instances:{enumerable:bn,value:un},overrides:{enumerable:bn,value:Xt},registry:{enumerable:bn,value:ns},version:{enumerable:bn,value:"3.9.1"},getChart:{enumerable:bn,value:fn},register:{enumerable:bn,value:(...t)=>{ns.add(...t),mn()}},unregister:{enumerable:bn,value:(...t)=>{ns.remove(...t),mn()}}});class vn extends Ui{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=$(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:h,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=this.options.spacing/2,f=c(d,r-a)>=C||q(n,a,r),g=G(o,l+u,h+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/2,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>C?Math.floor(i/C):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(s){a=s/2;const e=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(e)*a,Math.sin(e)*a),this.circumference>=D&&(a=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const r=function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){yn(t,e,i,s,a+C,n);for(let e=0;er&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Dn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i?Sn:Pn}vn.id="arc",vn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0},vn.defaultRoutes={backgroundColor:"backgroundColor"};const Cn="function"==typeof Path2D;class On extends Ui{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ne(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=function(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);return function(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=di(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=di(s.setContext(ve(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),ui(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d"borderDash"!==t&&"fill"!==t};class Tn extends Ui{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2){Bn(t)}))}var Nn={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Wn(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(n),h=a||e.data;if("y"===ye([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let d,{start:u,count:f}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=K(J(e,o.axis,a).lo,0,i-1)),s=h?K(J(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(f<=(i.threshold||4*s))Bn(e);else{switch(o(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":d=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,u,f,s,i);break;case"min-max":d=function(t,e,i,s){let n,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(n=e;ng&&(g=l,d=n),p=(m*p+a.x)/++m;else{const i=n-1;if(!o(c)&&!o(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}n>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=n}}return b}(h,u,f,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=d}}))},destroy(t){Wn(t)}};function Hn(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=X(n),o=X(o)),{property:t,start:n,end:o}}function jn(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function $n(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function Yn(t,e){let i=[],s=!1;return a(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=jn(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new On({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function Un(t){return t&&!1!==t.fill}function Xn(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!l(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function qn(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=c(i&&i.target,i);return void 0===s&&(s=!!e.backgroundColor),!1!==s&&null!==s&&(!0===s?"origin":s)}(t);if(r(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return l(n)&&Math.floor(n)===n?function(t,e,i,s){return"-"!==t&&"+"!==t||(i=e+i),!(i===e||i<0||i>=s)&&i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function Kn(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&Jn(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;Un(i)&&Jn(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;Un(s)&&"beforeDatasetDraw"===i.drawTime&&Jn(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const no=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class oo extends Ui{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=u(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=_e(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=no(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e/2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=ni(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=at(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=at(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=at(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=at(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;oe(t,this),this._draw(),ae(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=Zt.color,r=ni(t.rtl,this.left,this.width),l=_e(o.font),{color:h,padding:d}=o,u=l.size,f=u/2;let g;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=l.string;const{boxWidth:p,boxHeight:m,itemHeight:b}=no(o,u),x=this.isHorizontal(),_=this._computeTitleHeight();g=x?{x:at(n,this.left+d,this.right-i[0]),y:this.top+d+_,line:0}:{x:this.left+d,y:at(n,this.top+_+d,this.bottom-e[0].height),line:0},oi(this.ctx,t.textDirection);const y=b+d;this.legendItems.forEach(((v,M)=>{s.strokeStyle=v.fontColor||h,s.fillStyle=v.fontColor||h;const w=s.measureText(v.text).width,k=r.textAlign(v.textAlign||(v.textAlign=o.textAlign)),S=p+f+w;let P=g.x,D=g.y;r.setWidth(this.width),x?M>0&&P+S+d>this.right&&(D=g.y+=y,g.line++,P=g.x=at(n,this.left+d,this.right-i[g.line])):M>0&&D+y>this.bottom&&(P=g.x=P+e[g.line].width+d,g.line++,D=g.y=at(n,this.top+_+d,this.bottom-e[g.line].height)),function(t,e,i){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;s.save();const n=c(i.lineWidth,1);if(s.fillStyle=c(i.fillStyle,a),s.lineCap=c(i.lineCap,"butt"),s.lineDashOffset=c(i.lineDashOffset,0),s.lineJoin=c(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=c(i.strokeStyle,a),s.setLineDash(c(i.lineDash,[])),o.usePointStyle){const a={radius:m*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,p/2);se(s,a,l,e+f,o.pointStyleWidth&&p)}else{const o=e+Math.max((u-m)/2,0),a=r.leftForLtr(t,p),l=be(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?de(s,{x:a,y:o,w:p,h:m,radius:l}):s.rect(a,o,p,m),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(P),D,v),P=((t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e)(k,P+p+f,x?P+S:this.right,t.rtl),function(t,e,i){he(s,i.text,t,e+b/2,l,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(P),D,v),x?g.x+=S+d:g.y+=y})),ai(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=_e(e.font),s=xe(e.padding);if(!e.display)return;const n=ni(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=at(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+at(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=at(a,c,c+d);o.textAlign=n.textAlign(ot(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,he(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=_e(t.font),i=xe(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(G(t,this.left,this.right)&&G(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=xe(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ro extends Ui{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=a(i.text)?i.text.length:1;this._padding=xe(i.padding);const n=s*_e(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=at(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=at(a,s,e),c=-.5*D):(l=n-t,h=at(a,e,s),c=.5*D),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=_e(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);he(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ot(e.align),textBaseline:"middle",translation:[n,o]})}}var lo={id:"title",_element:ro,start(t,e,i){!function(t,e){const i=new ro({ctx:t.ctx,options:e,chart:t});Ds.configure(t,i,e),Ds.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Ds.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;Ds.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ho=new WeakMap;var co={id:"subtitle",start(t,e,i){const s=new ro({ctx:t.ctx,options:i,chart:t});Ds.configure(t,s,i),Ds.addBox(t,s),ho.set(t,s)},stop(t){Ds.removeBox(t,ho.get(t)),ho.delete(t)},beforeUpdate(t,e,i){const s=ho.get(t);Ds.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const uo={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function po(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function mo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=_e(e.bodyFont),h=_e(e.titleFont),c=_e(e.footerFont),d=o.length,u=n.length,g=s.length,p=xe(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x&&(m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing),u&&(m+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,f(t.title,y),i.font=l.string,f(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,f(s,(t=>{f(t.before,y),f(t.lines,y),f(t.after,y)})),_=0,i.font=c.string,f(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function bo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function xo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||bo(t,e,i,s),yAlign:s}}function _o(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=be(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:K(g,0,s.width-e.width),y:K(p,0,s.height-e.height)}}function yo(t,e,i){const s=xe(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function vo(t){return fo([],go(t))}function Mo(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class wo extends Ui{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new xi(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(this,ve(this.chart.getContext(),{tooltip:this,tooltipItems:this._tooltipItems,type:"tooltip"})))}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=fo(a,go(s)),a=fo(a,go(n)),a=fo(a,go(o)),a}getBeforeBody(t,e){return vo(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return f(t,(t=>{const e={before:[],lines:[],after:[]},n=Mo(i,t);fo(e.before,go(n.beforeLabel.call(this,t))),fo(e.lines,n.label.call(this,t)),fo(e.after,go(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return vo(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=fo(a,go(s)),a=fo(a,go(n)),a=fo(a,go(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),f(l,(e=>{const i=Mo(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=uo[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=mo(this,i),a=Object.assign({},t,e),r=xo(this.chart,i,a),l=_o(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=be(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=ni(i.rtl,this.x,this.width);for(t.x=yo(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=_e(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,de(t,{x:e,y:p,w:h,h:l,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),de(t,{x:i,y:p+1,w:h-2,h:l-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,p,h,l),t.strokeRect(e,p,h,l),t.fillStyle=o.backgroundColor,t.fillRect(i,p+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=_e(i.bodyFont);let d=c.lineHeight,u=0;const g=ni(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+u),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=yo(this,m,i),e.fillStyle=i.bodyColor,f(this.beforeBody,p),u=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=uo[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=mo(this,t),a=Object.assign({},i,this._size),r=xo(e,t,a),l=_o(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=xe(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),oi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),ai(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!g(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!g(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=uo[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}wo.positioners=uo;var ko={id:"tooltip",_element:wo,positioners:uo,afterInit(t,e,i){i&&(t.tooltip=new wo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",i))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:s,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},So=Object.freeze({__proto__:null,Decimation:Nn,Filler:so,Legend:ao,SubTitle:co,Title:lo,Tooltip:ko});class Po extends is{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(o(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:K(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:function(t,e,i,s){const n=t.indexOf(e);return-1===n?((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s):n!==t.lastIndexOf(e)?i:n}(i,t,c(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Do(t,e,{horizontal:i,minRotation:s}){const n=N(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}Po.id="category",Po.defaults={ticks:{callback:Po.prototype.getLabelForValue}};class Co extends is{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return o(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=z(s),e=z(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=n||1,g=c-1,{min:p,max:m}=e,b=!o(a),x=!o(r),_=!o(h),y=(m-p)/(d+1);let v,M,w,k,S=F((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=F(k*S/g/f)*f),o(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===s?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&n&&function(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}((r-a)/n,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=B(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(j(S),j(M));v=Math.pow(10,o(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),M0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=l(t)?Math.max(0,t):null,this.max=l(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(I(t))+e);i===s&&(i<=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i<=0&&n(a(s,-1)),s<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(I(e.max)),s=Math.ceil(e.max/Math.pow(10,i)),n=[];let o=h(t.min,Math.pow(10,Math.floor(I(e.min)))),a=Math.floor(I(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Ao(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l}while(an?{start:e-i,end:e}:{start:e,end:e+i}}function Ro(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.starte.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Io(t){return 0===t||180===t?"center":t<180?"left":"right"}function zo(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function Fo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,C);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o{const i=u(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?function(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?D/o:0;for(let u=0;u=0&&t=0;n--){const e=s.setContext(t.getPointLabelContext(n)),a=_e(e.font),{x:r,y:l,textAlign:h,left:c,top:d,right:u,bottom:f}=t._pointLabelItems[n],{backdropColor:g}=e;if(!o(g)){const t=be(e.borderRadius),s=xe(e.backdropPadding);i.fillStyle=g;const n=c-s.left,o=d-s.top,a=u-c+s.width,r=f-d+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),de(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}he(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:e.color,textAlign:h,textBaseline:"middle"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{0!==e&&(r=this.getDistanceFromCenterForValue(t.value),function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i<0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),Fo(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),r,n))})),i.display){for(t.save(),a=n-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=_e(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=xe(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}he(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}Vo.id="radialLinear",Vo.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:qi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},Vo.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},Vo.descriptors={angleLines:{_fallback:"grid"}};const Bo={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Wo=Object.keys(Bo);function No(t,e){return t-e}function Ho(t,e){if(o(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:a}=t._parseOpts;let r=e;return"function"==typeof s&&(r=s(r)),l(r)||(r="string"==typeof s?i.parse(r,s):i.parse(r)),null===r?null:(n&&(r="week"!==n||!V(a)&&!0!==a?i.startOf(r,n):i.startOf(r,"isoWeek",a)),+r)}function jo(t,e,i,s){const n=Wo.length;for(let o=Wo.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Yo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Uo extends is{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new hs._date(t.adapters.date);s.init(e),_(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Ho(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=l(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=l(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=function(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n=Wo.indexOf(i);o--){const i=Wo[o];if(Bo[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Wo[i?Wo.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Wo.indexOf(t)+1,i=Wo.length;e+t.value)))}initOffsets(t){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=K(s,0,o),n=K(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||jo(n.minUnit,e,i,this._getLabelCapacity(e)),a=c(n.stepSize,1),r="week"===o&&n.isoWeekday,l=V(r)||!0===r,h={};let d,u,f=e;if(l&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,l?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,f=this._adapter.format(t,s||(d?h:l)),g=n.ticks.callback;return g?u(g,[f,e,i],this):f}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=J(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=J(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}Uo.id="time",Uo.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class qo extends Uo{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Xo(e,this.min),this._tableRange=Xo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o{"use strict";var n=r(9864),i={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return n.isMemo(e)?o:s[e.$$typeof]||i}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=o;var l=Object.defineProperty,u=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(p){var i=h(r);i&&i!==p&&e(t,i,n)}var o=u(r);f&&(o=o.concat(f(r)));for(var s=c(t),m=c(r),g=0;g{"use strict";var r="function"==typeof Symbol&&Symbol.for,n=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,o=r?Symbol.for("react.strict_mode"):60108,s=r?Symbol.for("react.profiler"):60114,c=r?Symbol.for("react.provider"):60109,l=r?Symbol.for("react.context"):60110,u=r?Symbol.for("react.async_mode"):60111,f=r?Symbol.for("react.concurrent_mode"):60111,d=r?Symbol.for("react.forward_ref"):60112,h=r?Symbol.for("react.suspense"):60113,p=r?Symbol.for("react.suspense_list"):60120,m=r?Symbol.for("react.memo"):60115,g=r?Symbol.for("react.lazy"):60116,y=r?Symbol.for("react.block"):60121,v=r?Symbol.for("react.fundamental"):60117,b=r?Symbol.for("react.responder"):60118,S=r?Symbol.for("react.scope"):60119;function w(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case u:case f:case a:case s:case o:case h:return e;default:switch(e=e&&e.$$typeof){case l:case d:case g:case m:case c:return e;default:return t}}case i:return t}}}function A(e){return w(e)===f}t.AsyncMode=u,t.ConcurrentMode=f,t.ContextConsumer=l,t.ContextProvider=c,t.Element=n,t.ForwardRef=d,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=i,t.Profiler=s,t.StrictMode=o,t.Suspense=h,t.isAsyncMode=function(e){return A(e)||w(e)===u},t.isConcurrentMode=A,t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return w(e)===d},t.isFragment=function(e){return w(e)===a},t.isLazy=function(e){return w(e)===g},t.isMemo=function(e){return w(e)===m},t.isPortal=function(e){return w(e)===i},t.isProfiler=function(e){return w(e)===s},t.isStrictMode=function(e){return w(e)===o},t.isSuspense=function(e){return w(e)===h},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===s||e===o||e===h||e===p||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===c||e.$$typeof===l||e.$$typeof===d||e.$$typeof===v||e.$$typeof===b||e.$$typeof===S||e.$$typeof===y)},t.typeOf=w},9864:(e,t,r)=>{"use strict";e.exports=r(9921)},6774:e=>{e.exports=function(e,t,r,n){var i=r?r.call(n,e,t):void 0;if(void 0!==i)return!!i;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),o=Object.keys(t);if(a.length!==o.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c{"use strict";r.r(t),r.d(t,{ServerStyleSheet:()=>Be,StyleSheetConsumer:()=>oe,StyleSheetContext:()=>ae,StyleSheetManager:()=>de,ThemeConsumer:()=>$e,ThemeContext:()=>je,ThemeProvider:()=>Ne,__PRIVATE__:()=>Ye,createGlobalStyle:()=>Le,css:()=>Ae,default:()=>Ue,isStyledComponent:()=>A,keyframes:()=>Fe,useTheme:()=>We,version:()=>k,withTheme:()=>He});var n=r(9864),i=r(2950),a=r.n(i),o=r(6774),s=r.n(o);const c=function(e){function t(e,n,c,l,d){for(var h,p,m,g,S,A=0,C=0,k=0,x=0,P=0,T=0,$=m=h=0,M=0,z=0,D=0,G=0,L=c.length,F=L-1,B="",H="",W="",Y="";Mh)&&(G=(B=B.replace(" ",":")).length),0n&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return t.replace(g,"$1"+e.trim());case 58:return e.trim()+t.replace(g,"$1"+e.trim());default:if(0<1*r&&0c.charCodeAt(8))break;case 115:o=o.replace(c,"-webkit-"+c)+";"+o;break;case 207:case 102:o=o.replace(c,"-webkit-"+(102n.charCodeAt(0)&&(n=n.trim()),n=[n],01?t-1:0),n=1;n0?" Args: "+r.join(", "):""))}var I=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,r=0;r=this.groupSizes.length){for(var r=this.groupSizes,n=r.length,i=n;e>=i;)(i<<=1)<0&&_(16,""+e);this.groupSizes=new Uint32Array(i),this.groupSizes.set(r),this.length=i;for(var a=n;a=this.length||0===this.groupSizes[e])return t;for(var r=this.groupSizes[e],n=this.indexOfGroup(e),i=n+r,a=n;a=T&&(T=t+1),R.set(e,t),O.set(t,e)},M="style["+C+'][data-styled-version="5.3.3"]',z=new RegExp("^"+C+'\\.g(\\d+)\\[id="([\\w\\d-]+)"\\].*?"([^"]*)'),D=function(e,t,r){for(var n,i=r.split(","),a=0,o=i.length;a=0;r--){var n=t[r];if(n&&1===n.nodeType&&n.hasAttribute(C))return n}}(r),a=void 0!==i?i.nextSibling:null;n.setAttribute(C,"active"),n.setAttribute("data-styled-version","5.3.3");var o=L();return o&&n.setAttribute("nonce",o),r.insertBefore(n,a),n},B=function(){function e(e){var t=this.element=F(e);t.appendChild(document.createTextNode("")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,r=0,n=t.length;r=0){var r=document.createTextNode(t),n=this.nodes[e];return this.element.insertBefore(r,n||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e0&&(l+=e+",")})),n+=""+s+c+'{content:"'+l+'"}/*!sc*/\n'}}}return n}(this)},e}(),V=/(a)(d)/gi,X=function(e){return String.fromCharCode(e+(e>25?39:97))};function Z(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=X(t%52)+r;return(X(t%52)+r).replace(V,"$1-$2")}var J=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},K=function(e){return J(5381,e)};function Q(e){for(var t=0;t>>0);if(!t.hasNameForId(n,o)){var s=r(a,"."+o,void 0,n);t.insertRules(n,o,s)}i.push(o),this.staticRulesId=o}else{for(var c=this.rules.length,l=J(this.baseHash,r.hash),u="",f=0;f>>0);if(!t.hasNameForId(n,m)){var g=r(u,"."+m,void 0,n);t.insertRules(n,m,g)}i.push(m)}}return i.join(" ")},e}(),re=/^\s*\/\/.*$/gm,ne=[":","[",".","#"];function ie(e){var t,r,n,i,a=void 0===e?b:e,o=a.options,s=void 0===o?b:o,l=a.plugins,u=void 0===l?v:l,f=new c(s),d=[],h=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(r,n,i,a,o,s,c,l,u,f){switch(r){case 1:if(0===u&&64===n.charCodeAt(0))return e(n+";"),"";break;case 2:if(0===l)return n+"/*|*/";break;case 3:switch(l){case 102:case 112:return e(i[0]+n),"";default:return n+(0===f?"/*|*/":"")}case-2:n.split("/*|*/}").forEach(t)}}}((function(e){d.push(e)})),p=function(e,n,a){return 0===n&&-1!==ne.indexOf(a[r.length])||a.match(i)?e:"."+t};function m(e,a,o,s){void 0===s&&(s="&");var c=e.replace(re,""),l=a&&o?o+" "+a+" { "+c+" }":c;return t=s,r=a,n=new RegExp("\\"+r+"\\b","g"),i=new RegExp("(\\"+r+"\\b){2,}"),f(o||!a?"":a,l)}return f.use([].concat(u,[function(e,t,i){2===e&&i.length&&i[0].lastIndexOf(r)>0&&(i[0]=i[0].replace(n,p))},h,function(e){if(-2===e){var t=d;return d=[],t}}])),m.hash=u.length?u.reduce((function(e,t){return t.name||_(15),J(e,t.name)}),5381).toString():"",m}var ae=a().createContext(),oe=ae.Consumer,se=a().createContext(),ce=(se.Consumer,new q),le=ie();function ue(){return(0,i.useContext)(ae)||ce}function fe(){return(0,i.useContext)(se)||le}function de(e){var t=(0,i.useState)(e.stylisPlugins),r=t[0],n=t[1],o=ue(),c=(0,i.useMemo)((function(){var t=o;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),l=(0,i.useMemo)((function(){return ie({options:{prefix:!e.disableVendorPrefixes},plugins:r})}),[e.disableVendorPrefixes,r]);return(0,i.useEffect)((function(){s()(r,e.stylisPlugins)||n(e.stylisPlugins)}),[e.stylisPlugins]),a().createElement(ae.Provider,{value:c},a().createElement(se.Provider,{value:l},e.children))}var he=function(){function e(e,t){var r=this;this.inject=function(e,t){void 0===t&&(t=le);var n=r.name+t.hash;e.hasNameForId(r.id,n)||e.insertRules(r.id,n,t(r.rules,n,"@keyframes"))},this.toString=function(){return _(12,String(r.name))},this.name=e,this.id="sc-keyframes-"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=le),this.name+e.hash},e}(),pe=/([A-Z])/,me=/([A-Z])/g,ge=/^ms-/,ye=function(e){return"-"+e.toLowerCase()};function ve(e){return pe.test(e)?e.replace(me,ye).replace(ge,"-ms-"):e}var be=function(e){return null==e||!1===e||""===e};function Se(e,t,r,n){if(Array.isArray(e)){for(var i,a=[],o=0,s=e.length;o1?t-1:0),n=1;n?@[\\\]^`{|}~-]+/g,xe=/(^-|-$)/g;function Pe(e){return e.replace(ke,"-").replace(xe,"")}var Ee=function(e){return Z(K(e)>>>0)};function _e(e){return"string"==typeof e&&!0}var Ie=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},Re=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function Oe(e,t,r){var n=e[r];Ie(t)&&Ie(n)?Te(n,t):e[r]=t}function Te(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=0||(i[r]=e[r]);return i}(t,["componentId"]),a=n&&n+"-"+(_e(e)?e:Pe(w(e)));return ze(e,m({},i,{attrs:y,componentId:a}),r)},Object.defineProperty(k,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=n?Te({},e.defaultProps,t):t}}),k.toString=function(){return"."+k.styledComponentId},o&&p()(k,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),k}var De=function(e){return function e(t,r,i){if(void 0===i&&(i=b),!(0,n.isValidElementType)(r))return _(1,String(r));var a=function(){return t(r,i,Ae.apply(void 0,arguments))};return a.withConfig=function(n){return e(t,r,m({},i,{},n))},a.attrs=function(n){return e(t,r,m({},i,{attrs:Array.prototype.concat(i.attrs,n).filter(Boolean)}))},a}(ze,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","textPath","tspan"].forEach((function(e){De[e]=De(e)}));var Ge=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Q(e),q.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,r,n){var i=n(Se(this.rules,t,r,n).join(""),""),a=this.componentId+e;r.insertRules(a,a,i)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,r,n){e>2&&q.registerId(this.componentId+e),this.removeStyles(e,r),this.createStyles(e,t,r,n)},e}();function Le(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n"+t+""},this.getStyleTags=function(){return e.sealed?_(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return _(2);var r=((t={})[C]="",t["data-styled-version"]="5.3.3",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),n=L();return n&&(r.nonce=n),[a().createElement("style",m({},r,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new q({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?_(2):a().createElement(de,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return _(3)},e}(),He=function(e){var t=a().forwardRef((function(t,r){var n=(0,i.useContext)(je),o=e.defaultProps,s=Ce(t,n,o);return a().createElement(e,m({},t,{theme:s,ref:r}))}));return p()(t,e),t.displayName="WithTheme("+w(e)+")",t},We=function(){return(0,i.useContext)(je)},Ye={StyleSheet:q,masterSheet:ce};const Ue=De}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y0FBY3dLLEtBQUswTCxLQUFLLFdBQVdoVyxFQUFFMlYsUUFBTyxHQUFJckwsS0FBS21MLFNBQVMsSUFBSXpQLEVBQUUsQ0FBQ2tJLFVBQVMsSUFBSzVELEtBQUtxTCxRQUFPLEVBQUcsSUFBSTNVLEVBQUVoQixFQUFFbkMsVUFBVSxPQUFPbUQsRUFBRWlWLGNBQWMsU0FBU2pXLEdBQUcsT0FBT3NLLEtBQUtxTCxPQUFPeEssRUFBRSxHQUFHLGtCQUFnQnNHLEdBQUcsQ0FBQ2hFLE1BQU1uRCxLQUFLbUwsVUFBVXpWLElBQUlnQixFQUFFa1YseUJBQXlCLFNBQVNsVyxHQUFHLE9BQU9tTCxFQUFFLElBQUluTCxFQUF0ekIsR0FBMnpCbVcsR0FBRyxTQUFTblcsR0FBRyxJQUFJZ0IsRUFBRSxnQkFBYSxTQUFVQSxFQUFFSixHQUFHLElBQUkySixHQUFFLGdCQUFFbUosSUFBSTdULEVBQUVHLEVBQUU5QyxhQUFhb0UsRUFBRXlSLEdBQUcvUixFQUFFdUosRUFBRTFLLEdBQUcsT0FBdU0sa0JBQWdCRyxFQUFFaUIsRUFBRSxHQUFHRCxFQUFFLENBQUNnUyxNQUFNMVIsRUFBRW1ULElBQUk3VCxRQUFRLE9BQU8sSUFBRUksRUFBRWhCLEdBQUdnQixFQUFFN0QsWUFBWSxhQUFhd04sRUFBRTNLLEdBQUcsSUFBSWdCLEdBQUdvVixHQUFHLFdBQVcsT0FBTyxnQkFBRTFDLEtBQUsyQyxHQUFHLENBQUNDLFdBQVd0USxFQUFFdVEsWUFBWWxGLElBQTA1QiIsInNvdXJjZXMiOlsid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zaGFsbG93ZXF1YWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGlzL2Rpc3Qvc3R5bGlzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvdW5pdGxlc3MuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvc3R5bGVkLWNvbXBvbmVudHMvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2lzLXByb3AtdmFsaWQvZGlzdC9pcy1wcm9wLXZhbGlkLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3N0eWxlZC1jb21wb25lbnRzL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvbWVtb2l6ZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zdHlsZWQtY29tcG9uZW50cy9kaXN0L3N0eWxlZC1jb21wb25lbnRzLmJyb3dzZXIuZXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLy9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQiwgY29tcGFyZSwgY29tcGFyZUNvbnRleHQpIHtcbiAgdmFyIHJldCA9IGNvbXBhcmUgPyBjb21wYXJlLmNhbGwoY29tcGFyZUNvbnRleHQsIG9iakEsIG9iakIpIDogdm9pZCAwO1xuXG4gIGlmIChyZXQgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiAhIXJldDtcbiAgfVxuXG4gIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09IFwib2JqZWN0XCIgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09IFwib2JqZWN0XCIgfHwgIW9iakIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGJIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChvYmpCKTtcblxuICAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNBW2lkeF07XG5cbiAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlQSA9IG9iakFba2V5XTtcbiAgICB2YXIgdmFsdWVCID0gb2JqQltrZXldO1xuXG4gICAgcmV0ID0gY29tcGFyZSA/IGNvbXBhcmUuY2FsbChjb21wYXJlQ29udGV4dCwgdmFsdWVBLCB2YWx1ZUIsIGtleSkgOiB2b2lkIDA7XG5cbiAgICBpZiAocmV0ID09PSBmYWxzZSB8fCAocmV0ID09PSB2b2lkIDAgJiYgdmFsdWVBICE9PSB2YWx1ZUIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiZnVuY3Rpb24gc3R5bGlzX21pbiAoVykge1xuICBmdW5jdGlvbiBNKGQsIGMsIGUsIGgsIGEpIHtcbiAgICBmb3IgKHZhciBtID0gMCwgYiA9IDAsIHYgPSAwLCBuID0gMCwgcSwgZywgeCA9IDAsIEsgPSAwLCBrLCB1ID0gayA9IHEgPSAwLCBsID0gMCwgciA9IDAsIEkgPSAwLCB0ID0gMCwgQiA9IGUubGVuZ3RoLCBKID0gQiAtIDEsIHksIGYgPSAnJywgcCA9ICcnLCBGID0gJycsIEcgPSAnJywgQzsgbCA8IEI7KSB7XG4gICAgICBnID0gZS5jaGFyQ29kZUF0KGwpO1xuICAgICAgbCA9PT0gSiAmJiAwICE9PSBiICsgbiArIHYgKyBtICYmICgwICE9PSBiICYmIChnID0gNDcgPT09IGIgPyAxMCA6IDQ3KSwgbiA9IHYgPSBtID0gMCwgQisrLCBKKyspO1xuXG4gICAgICBpZiAoMCA9PT0gYiArIG4gKyB2ICsgbSkge1xuICAgICAgICBpZiAobCA9PT0gSiAmJiAoMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKSwgMCA8IGYudHJpbSgpLmxlbmd0aCkpIHtcbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBmICs9IGUuY2hhckF0KGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGcgPSA1OTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgZiA9IGYudHJpbSgpO1xuICAgICAgICAgICAgcSA9IGYuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIGsgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKHQgPSArK2w7IGwgPCBCOykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICBrLS07XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gbCArIDE7IHUgPCBKOyArK3UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLmNoYXJDb2RlQXQodSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQyID09PSBnICYmIDQyID09PSBlLmNoYXJDb2RlQXQodSAtIDEpICYmIGwgKyAyICE9PSB1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQ3ID09PSBnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1O1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgICAgICBnKys7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgZm9yICg7IGwrKyA8IEogJiYgZS5jaGFyQ29kZUF0KGwpICE9PSBnOykge1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoMCA9PT0gaykgYnJlYWs7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayA9IGUuc3Vic3RyaW5nKHQsIGwpO1xuICAgICAgICAgICAgMCA9PT0gcSAmJiAocSA9IChmID0gZi5yZXBsYWNlKGNhLCAnJykudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcblxuICAgICAgICAgICAgc3dpdGNoIChxKSB7XG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKTtcbiAgICAgICAgICAgICAgICBnID0gZi5jaGFyQ29kZUF0KDEpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICByID0gYztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHIgPSBPO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIHIsIGssIGcsIGEgKyAxKTtcbiAgICAgICAgICAgICAgICB0ID0gay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgMCA8IEEgJiYgKHIgPSBYKE8sIGYsIEkpLCBDID0gSCgzLCBrLCByLCBjLCBELCB6LCB0LCBnLCBhLCBoKSwgZiA9IHIuam9pbignJyksIHZvaWQgMCAhPT0gQyAmJiAwID09PSAodCA9IChrID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGcgPSAwLCBrID0gJycpKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA8IHQpIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoZGEsIGVhKTtcblxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGZhLCAnJDEgJDInKTtcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyAneycgKyBrICsgJ30nO1xuICAgICAgICAgICAgICAgICAgICBrID0gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoJ0AnICsgaywgMykgPyAnQC13ZWJraXQtJyArIGsgKyAnQCcgKyBrIDogJ0AnICsgaztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgaywgMTEyID09PSBoICYmIChrID0gKHAgKz0gaywgJycpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgayA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgayA9IE0oYywgWChjLCBmLCBJKSwgaywgaCwgYSArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBGICs9IGs7XG4gICAgICAgICAgICBrID0gSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBmID0gKDAgPCByID8gZi5yZXBsYWNlKE4sICcnKSA6IGYpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgxIDwgKHQgPSBmLmxlbmd0aCkpIHN3aXRjaCAoMCA9PT0gdSAmJiAocSA9IGYuY2hhckNvZGVBdCgwKSwgNDUgPT09IHEgfHwgOTYgPCBxICYmIDEyMyA+IHEpICYmICh0ID0gKGYgPSBmLnJlcGxhY2UoJyAnLCAnOicpKS5sZW5ndGgpLCAwIDwgQSAmJiB2b2lkIDAgIT09IChDID0gSCgxLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCkpICYmIDAgPT09ICh0ID0gKGYgPSBDLnRyaW0oKSkubGVuZ3RoKSAmJiAoZiA9ICdcXHgwMFxceDAwJyksIHEgPSBmLmNoYXJDb2RlQXQoMCksIGcgPSBmLmNoYXJDb2RlQXQoMSksIHEpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgaWYgKDEwNSA9PT0gZyB8fCA5OSA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgRyArPSBmICsgZS5jaGFyQXQobCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICA1OCAhPT0gZi5jaGFyQ29kZUF0KHQgLSAxKSAmJiAocCArPSBQKGYsIHEsIGcsIGYuY2hhckNvZGVBdCgyKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgNDcgPT09IGIgPyBiID0gMCA6IDAgPT09IDEgKyBxICYmIDEwNyAhPT0gaCAmJiAwIDwgZi5sZW5ndGggJiYgKHIgPSAxLCBmICs9ICdcXHgwMCcpO1xuICAgICAgICAgIDAgPCBBICogWSAmJiBIKDAsIGYsIGMsIGQsIEQsIHosIHAubGVuZ3RoLCBoLCBhLCBoKTtcbiAgICAgICAgICB6ID0gMTtcbiAgICAgICAgICBEKys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgICAgIHorKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHorKztcbiAgICAgICAgICB5ID0gZS5jaGFyQXQobCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgbSArIGIpIHN3aXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgIHkgPSAnJztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIDMyICE9PSBnICYmICh5ID0gJyAnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFwwJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXGYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcdic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHIgPSBJID0gMSwgeSA9ICdcXGYnICsgeSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSArIEUgJiYgMCA8IHUpIHN3aXRjaCAobCAtIHUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAxMTIgPT09IHggJiYgNTggPT09IGUuY2hhckNvZGVBdChsIC0gMykgJiYgKEUgPSB4KTtcblxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgIDExMSA9PT0gSyAmJiAoRSA9IEspO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHUgPSBsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgIDAgPT09IGIgKyB2ICsgbiArIG0gJiYgKHIgPSAxLCB5ICs9ICdcXHInKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAwID09PSBiICYmIChuID0gbiA9PT0gZyA/IDAgOiAwID09PSBuID8gZyA6IG4pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyB2ICYmIG0rKztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtLS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgdi0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSkge1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBxKSBzd2l0Y2ggKDIgKiB4ICsgMyAqIEspIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTMzOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHYrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICsgdSArIGsgJiYgKGsgPSAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICBpZiAoISgwIDwgbiArIG0gKyB2KSkgc3dpdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgc3dpdGNoICgyICogZyArIDMgKiBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjM1OlxuICAgICAgICAgICAgICAgICAgICAgIGIgPSA0NztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIyMDpcbiAgICAgICAgICAgICAgICAgICAgICB0ID0gbCwgYiA9IDQyO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICA0NyA9PT0gZyAmJiA0MiA9PT0geCAmJiB0ICsgMiAhPT0gbCAmJiAoMzMgPT09IGUuY2hhckNvZGVBdCh0ICsgMikgJiYgKHAgKz0gZS5zdWJzdHJpbmcodCwgbCArIDEpKSwgeSA9ICcnLCBiID0gMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAwID09PSBiICYmIChmICs9IHkpO1xuICAgICAgfVxuXG4gICAgICBLID0geDtcbiAgICAgIHggPSBnO1xuICAgICAgbCsrO1xuICAgIH1cblxuICAgIHQgPSBwLmxlbmd0aDtcblxuICAgIGlmICgwIDwgdCkge1xuICAgICAgciA9IGM7XG4gICAgICBpZiAoMCA8IEEgJiYgKEMgPSBIKDIsIHAsIHIsIGQsIEQsIHosIHQsIGgsIGEsIGgpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHAgPSBDKS5sZW5ndGgpKSByZXR1cm4gRyArIHAgKyBGO1xuICAgICAgcCA9IHIuam9pbignLCcpICsgJ3snICsgcCArICd9JztcblxuICAgICAgaWYgKDAgIT09IHcgKiBFKSB7XG4gICAgICAgIDIgIT09IHcgfHwgTChwLCAyKSB8fCAoRSA9IDApO1xuXG4gICAgICAgIHN3aXRjaCAoRSkge1xuICAgICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgICAgcCA9IHAucmVwbGFjZShoYSwgJzotbW96LSQxJykgKyBwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoUSwgJzo6LXdlYmtpdC1pbnB1dC0kMScpICsgcC5yZXBsYWNlKFEsICc6Oi1tb3otJDEnKSArIHAucmVwbGFjZShRLCAnOi1tcy1pbnB1dC0kMScpICsgcDtcbiAgICAgICAgfVxuXG4gICAgICAgIEUgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBHICsgcCArIEY7XG4gIH1cblxuICBmdW5jdGlvbiBYKGQsIGMsIGUpIHtcbiAgICB2YXIgaCA9IGMudHJpbSgpLnNwbGl0KGlhKTtcbiAgICBjID0gaDtcbiAgICB2YXIgYSA9IGgubGVuZ3RoLFxuICAgICAgICBtID0gZC5sZW5ndGg7XG5cbiAgICBzd2l0Y2ggKG0pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIGIgPSAwO1xuXG4gICAgICAgIGZvciAoZCA9IDAgPT09IG0gPyAnJyA6IGRbMF0gKyAnICc7IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBjW2JdID0gWihkLCBjW2JdLCBlKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHYgPSBiID0gMDtcblxuICAgICAgICBmb3IgKGMgPSBbXTsgYiA8IGE7ICsrYikge1xuICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbTsgKytuKSB7XG4gICAgICAgICAgICBjW3YrK10gPSBaKGRbbl0gKyAnICcsIGhbYl0sIGUpLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gWihkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgMzMgPiBoICYmIChoID0gKGMgPSBjLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBzd2l0Y2ggKGgpIHtcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIHJldHVybiBjLnJlcGxhY2UoRiwgJyQxJyArIGQudHJpbSgpKTtcblxuICAgICAgY2FzZSA1ODpcbiAgICAgICAgcmV0dXJuIGQudHJpbSgpICsgYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgwIDwgMSAqIGUgJiYgMCA8IGMuaW5kZXhPZignXFxmJykpIHJldHVybiBjLnJlcGxhY2UoRiwgKDU4ID09PSBkLmNoYXJDb2RlQXQoMCkgPyAnJyA6ICckMScpICsgZC50cmltKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkICsgYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFAoZCwgYywgZSwgaCkge1xuICAgIHZhciBhID0gZCArICc7JyxcbiAgICAgICAgbSA9IDIgKiBjICsgMyAqIGUgKyA0ICogaDtcblxuICAgIGlmICg5NDQgPT09IG0pIHtcbiAgICAgIGQgPSBhLmluZGV4T2YoJzonLCA5KSArIDE7XG4gICAgICB2YXIgYiA9IGEuc3Vic3RyaW5nKGQsIGEubGVuZ3RoIC0gMSkudHJpbSgpO1xuICAgICAgYiA9IGEuc3Vic3RyaW5nKDAsIGQpLnRyaW0oKSArIGIgKyAnOyc7XG4gICAgICByZXR1cm4gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoYiwgMSkgPyAnLXdlYmtpdC0nICsgYiArIGIgOiBiO1xuICAgIH1cblxuICAgIGlmICgwID09PSB3IHx8IDIgPT09IHcgJiYgIUwoYSwgMSkpIHJldHVybiBhO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDEwMTU6XG4gICAgICAgIHJldHVybiA5NyA9PT0gYS5jaGFyQ29kZUF0KDEwKSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTUxOlxuICAgICAgICByZXR1cm4gMTE2ID09PSBhLmNoYXJDb2RlQXQoMykgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk2MzpcbiAgICAgICAgcmV0dXJuIDExMCA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSAxMDA5OlxuICAgICAgICBpZiAoMTAwICE9PSBhLmNoYXJDb2RlQXQoNCkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2OTpcbiAgICAgIGNhc2UgOTQyOlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDk3ODpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMTk6XG4gICAgICBjYXNlIDk4MzpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA4ODM6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDgpKSByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuICAgICAgICBpZiAoMCA8IGEuaW5kZXhPZignaW1hZ2Utc2V0KCcsIDExKSkgcmV0dXJuIGEucmVwbGFjZShqYSwgJyQxLXdlYmtpdC0kMicpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMyOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg0KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNSkpIHtcbiAgICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtJyArIGEucmVwbGFjZSgnLWdyb3cnLCAnJykgKyAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnZ3JvdycsICdwb3NpdGl2ZScpICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgYTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5NjQ6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAyMzpcbiAgICAgICAgaWYgKDk5ICE9PSBhLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuICAgICAgICBiID0gYS5zdWJzdHJpbmcoYS5pbmRleE9mKCc6JywgMTUpKS5yZXBsYWNlKCdmbGV4LScsICcnKS5yZXBsYWNlKCdzcGFjZS1iZXR3ZWVuJywgJ2p1c3RpZnknKTtcbiAgICAgICAgcmV0dXJuICctd2Via2l0LWJveC1wYWNrJyArIGIgKyAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1wYWNrJyArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMDU6XG4gICAgICAgIHJldHVybiBrYS50ZXN0KGEpID8gYS5yZXBsYWNlKGFhLCAnOi13ZWJraXQtJykgKyBhLnJlcGxhY2UoYWEsICc6LW1vei0nKSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDFlMzpcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKDEzKS50cmltKCk7XG4gICAgICAgIGMgPSBiLmluZGV4T2YoJy0nKSArIDE7XG5cbiAgICAgICAgc3dpdGNoIChiLmNoYXJDb2RlQXQoMCkgKyBiLmNoYXJDb2RlQXQoYykpIHtcbiAgICAgICAgICBjYXNlIDIyNjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjMyOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAndGItcmwnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICdscicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDE3OlxuICAgICAgICBpZiAoLTEgPT09IGEuaW5kZXhPZignc3RpY2t5JywgOSkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3NTpcbiAgICAgICAgYyA9IChhID0gZCkubGVuZ3RoIC0gMTA7XG4gICAgICAgIGIgPSAoMzMgPT09IGEuY2hhckNvZGVBdChjKSA/IGEuc3Vic3RyaW5nKDAsIGMpIDogYSkuc3Vic3RyaW5nKGQuaW5kZXhPZignOicsIDcpICsgMSkudHJpbSgpO1xuXG4gICAgICAgIHN3aXRjaCAobSA9IGIuY2hhckNvZGVBdCgwKSArIChiLmNoYXJDb2RlQXQoNykgfCAwKSkge1xuICAgICAgICAgIGNhc2UgMjAzOlxuICAgICAgICAgICAgaWYgKDExMSA+IGIuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDc6XG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyAoMTAyIDwgbSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gnKSArICc7JyArIGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy1tcy0nICsgYiArICdib3gnKSArICc7JyArIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYSArICc7JztcblxuICAgICAgY2FzZSA5Mzg6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDUpKSBzd2l0Y2ggKGEuY2hhckNvZGVBdCg2KSkge1xuICAgICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgICAgcmV0dXJuIGIgPSBhLnJlcGxhY2UoJy1pdGVtcycsICcnKSwgJy13ZWJraXQtJyArIGEgKyAnLXdlYmtpdC1ib3gtJyArIGIgKyAnLW1zLWZsZXgtJyArIGIgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtaXRlbS0nICsgYS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1saW5lLXBhY2snICsgYS5yZXBsYWNlKCdhbGlnbi1jb250ZW50JywgJycpLnJlcGxhY2UoYmEsICcnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTczOlxuICAgICAgY2FzZSA5ODk6XG4gICAgICAgIGlmICg0NSAhPT0gYS5jaGFyQ29kZUF0KDMpIHx8IDEyMiA9PT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5MzE6XG4gICAgICBjYXNlIDk1MzpcbiAgICAgICAgaWYgKCEwID09PSBsYS50ZXN0KGQpKSByZXR1cm4gMTE1ID09PSAoYiA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignOicpICsgMSkpLmNoYXJDb2RlQXQoMCkgPyBQKGQucmVwbGFjZSgnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBjLCBlLCBoKS5yZXBsYWNlKCc6ZmlsbC1hdmFpbGFibGUnLCAnOnN0cmV0Y2gnKSA6IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyBhLnJlcGxhY2UoYiwgJy1tb3otJyArIGIucmVwbGFjZSgnZmlsbC0nLCAnJykpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTYyOlxuICAgICAgICBpZiAoYSA9ICctd2Via2l0LScgKyBhICsgKDEwMiA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy1tcy0nICsgYSA6ICcnKSArIGEsIDIxMSA9PT0gZSArIGggJiYgMTA1ID09PSBhLmNoYXJDb2RlQXQoMTMpICYmIDAgPCBhLmluZGV4T2YoJ3RyYW5zZm9ybScsIDEwKSkgcmV0dXJuIGEuc3Vic3RyaW5nKDAsIGEuaW5kZXhPZignOycsIDI3KSArIDEpLnJlcGxhY2UobWEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBMKGQsIGMpIHtcbiAgICB2YXIgZSA9IGQuaW5kZXhPZigxID09PSBjID8gJzonIDogJ3snKSxcbiAgICAgICAgaCA9IGQuc3Vic3RyaW5nKDAsIDMgIT09IGMgPyBlIDogMTApO1xuICAgIGUgPSBkLnN1YnN0cmluZyhlICsgMSwgZC5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gUigyICE9PSBjID8gaCA6IGgucmVwbGFjZShuYSwgJyQxJyksIGUsIGMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZWEoZCwgYykge1xuICAgIHZhciBlID0gUChjLCBjLmNoYXJDb2RlQXQoMCksIGMuY2hhckNvZGVBdCgxKSwgYy5jaGFyQ29kZUF0KDIpKTtcbiAgICByZXR1cm4gZSAhPT0gYyArICc7JyA/IGUucmVwbGFjZShvYSwgJyBvciAoJDEpJykuc3Vic3RyaW5nKDQpIDogJygnICsgYyArICcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIEgoZCwgYywgZSwgaCwgYSwgbSwgYiwgdiwgbiwgcSkge1xuICAgIGZvciAodmFyIGcgPSAwLCB4ID0gYywgdzsgZyA8IEE7ICsrZykge1xuICAgICAgc3dpdGNoICh3ID0gU1tnXS5jYWxsKEIsIGQsIHgsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpKSB7XG4gICAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgICBjYXNlICExOlxuICAgICAgICBjYXNlICEwOlxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB4ID0gdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoeCAhPT0gYykgcmV0dXJuIHg7XG4gIH1cblxuICBmdW5jdGlvbiBUKGQpIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgICBBID0gUy5sZW5ndGggPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkKSBTW0ErK10gPSBkO2Vsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgZCkgZm9yICh2YXIgYyA9IDAsIGUgPSBkLmxlbmd0aDsgYyA8IGU7ICsrYykge1xuICAgICAgICAgIFQoZFtjXSk7XG4gICAgICAgIH0gZWxzZSBZID0gISFkIHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gVDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFUoZCkge1xuICAgIGQgPSBkLnByZWZpeDtcbiAgICB2b2lkIDAgIT09IGQgJiYgKFIgPSBudWxsLCBkID8gJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGQgPyB3ID0gMSA6ICh3ID0gMiwgUiA9IGQpIDogdyA9IDApO1xuICAgIHJldHVybiBVO1xuICB9XG5cbiAgZnVuY3Rpb24gQihkLCBjKSB7XG4gICAgdmFyIGUgPSBkO1xuICAgIDMzID4gZS5jaGFyQ29kZUF0KDApICYmIChlID0gZS50cmltKCkpO1xuICAgIFYgPSBlO1xuICAgIGUgPSBbVl07XG5cbiAgICBpZiAoMCA8IEEpIHtcbiAgICAgIHZhciBoID0gSCgtMSwgYywgZSwgZSwgRCwgeiwgMCwgMCwgMCwgMCk7XG4gICAgICB2b2lkIDAgIT09IGggJiYgJ3N0cmluZycgPT09IHR5cGVvZiBoICYmIChjID0gaCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBNKE8sIGUsIGMsIDAsIDApO1xuICAgIDAgPCBBICYmIChoID0gSCgtMiwgYSwgZSwgZSwgRCwgeiwgYS5sZW5ndGgsIDAsIDAsIDApLCB2b2lkIDAgIT09IGggJiYgKGEgPSBoKSk7XG4gICAgViA9ICcnO1xuICAgIEUgPSAwO1xuICAgIHogPSBEID0gMTtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBjYSA9IC9eXFwwKy9nLFxuICAgICAgTiA9IC9bXFwwXFxyXFxmXS9nLFxuICAgICAgYWEgPSAvOiAqL2csXG4gICAgICBrYSA9IC96b298Z3JhLyxcbiAgICAgIG1hID0gLyhbLDogXSkodHJhbnNmb3JtKS9nLFxuICAgICAgaWEgPSAvLFxccis/L2csXG4gICAgICBGID0gLyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csXG4gICAgICBmYSA9IC9AKGtcXHcrKVxccyooXFxTKilcXHMqLyxcbiAgICAgIFEgPSAvOjoocGxhY2UpL2csXG4gICAgICBoYSA9IC86KHJlYWQtb25seSkvZyxcbiAgICAgIEcgPSAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sXG4gICAgICBkYSA9IC9cXChcXHMqKC4qKVxccypcXCkvZyxcbiAgICAgIG9hID0gLyhbXFxzXFxTXSo/KTsvZyxcbiAgICAgIGJhID0gLy1zZWxmfGZsZXgtL2csXG4gICAgICBuYSA9IC9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxcbiAgICAgIGxhID0gL3N0cmV0Y2h8OlxccypcXHcrXFwtKD86Y29udGV8YXZhaWwpLyxcbiAgICAgIGphID0gLyhbXi1dKShpbWFnZS1zZXRcXCgpLyxcbiAgICAgIHogPSAxLFxuICAgICAgRCA9IDEsXG4gICAgICBFID0gMCxcbiAgICAgIHcgPSAxLFxuICAgICAgTyA9IFtdLFxuICAgICAgUyA9IFtdLFxuICAgICAgQSA9IDAsXG4gICAgICBSID0gbnVsbCxcbiAgICAgIFkgPSAwLFxuICAgICAgViA9ICcnO1xuICBCLnVzZSA9IFQ7XG4gIEIuc2V0ID0gVTtcbiAgdm9pZCAwICE9PSBXICYmIFUoVyk7XG4gIHJldHVybiBCO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsaXNfbWluO1xuIiwidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXRsZXNzS2V5cztcbiIsImltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgcmVhY3RQcm9wc1JlZ2V4ID0gL14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpbmRleCA9IG1lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplO1xuIiwiaW1wb3J0e3R5cGVPZiBhcyBlLGlzRWxlbWVudCBhcyB0LGlzVmFsaWRFbGVtZW50VHlwZSBhcyBufWZyb21cInJlYWN0LWlzXCI7aW1wb3J0IHIse3VzZVN0YXRlIGFzIG8sdXNlQ29udGV4dCBhcyBzLHVzZU1lbW8gYXMgaSx1c2VFZmZlY3QgYXMgYSx1c2VSZWYgYXMgYyxjcmVhdGVFbGVtZW50IGFzIHUsdXNlRGVidWdWYWx1ZSBhcyBsLHVzZUxheW91dEVmZmVjdCBhcyBkfWZyb21cInJlYWN0XCI7aW1wb3J0IGggZnJvbVwic2hhbGxvd2VxdWFsXCI7aW1wb3J0IHAgZnJvbVwiQGVtb3Rpb24vc3R5bGlzXCI7aW1wb3J0IGYgZnJvbVwiQGVtb3Rpb24vdW5pdGxlc3NcIjtpbXBvcnQgbSBmcm9tXCJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkXCI7aW1wb3J0IHkgZnJvbVwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjtmdW5jdGlvbiB2KCl7cmV0dXJuKHY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bZVswXV0scj0wLG89dC5sZW5ndGg7cjxvO3IrPTEpbi5wdXNoKHRbcl0sZVtyKzFdKTtyZXR1cm4gbn0sUz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcIltvYmplY3QgT2JqZWN0XVwiPT09KHQudG9TdHJpbmc/dC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSkmJiFlKHQpfSx3PU9iamVjdC5mcmVlemUoW10pLEU9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gYihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIF8oZSl7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJmV8fGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBOKGUpe3JldHVybiBlJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdHlsZWRDb21wb25lbnRJZH12YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmKHByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19BVFRSfHxwcm9jZXNzLmVudi5TQ19BVFRSKXx8XCJkYXRhLXN0eWxlZFwiLEM9XCI1LjMuM1wiLEk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJIVE1MRWxlbWVudFwiaW4gd2luZG93LFA9Qm9vbGVhbihcImJvb2xlYW5cIj09dHlwZW9mIFNDX0RJU0FCTEVfU1BFRURZP1NDX0RJU0FCTEVfU1BFRURZOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiZ2b2lkIDAhPT1wcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFkmJlwiXCIhPT1wcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFk/XCJmYWxzZVwiIT09cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1NDX0RJU0FCTEVfU1BFRURZJiZwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJnZvaWQgMCE9PXByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZJiZcIlwiIT09cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFk/XCJmYWxzZVwiIT09cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFkmJnByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZOlwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYpLE89e30sUj1cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WP3sxOlwiQ2Fubm90IGNyZWF0ZSBzdHlsZWQtY29tcG9uZW50IGZvciBjb21wb25lbnQ6ICVzLlxcblxcblwiLDI6XCJDYW4ndCBjb2xsZWN0IHN0eWxlcyBvbmNlIHlvdSd2ZSBjb25zdW1lZCBhIGBTZXJ2ZXJTdHlsZVNoZWV0YCdzIHN0eWxlcyEgYFNlcnZlclN0eWxlU2hlZXRgIGlzIGEgb25lIG9mZiBpbnN0YW5jZSBmb3IgZWFjaCBzZXJ2ZXItc2lkZSByZW5kZXIgY3ljbGUuXFxuXFxuLSBBcmUgeW91IHRyeWluZyB0byByZXVzZSBpdCBhY3Jvc3MgcmVuZGVycz9cXG4tIEFyZSB5b3UgYWNjaWRlbnRhbGx5IGNhbGxpbmcgY29sbGVjdFN0eWxlcyB0d2ljZT9cXG5cXG5cIiwzOlwiU3RyZWFtaW5nIFNTUiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQ7IFBsZWFzZSBkbyBub3QgdHJ5IHRvIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIGJyb3dzZXIuXFxuXFxuXCIsNDpcIlRoZSBgU3R5bGVTaGVldE1hbmFnZXJgIGV4cGVjdHMgYSB2YWxpZCB0YXJnZXQgb3Igc2hlZXQgcHJvcCFcXG5cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgY2xpZW50IGFuZCBpcyB5b3VyIHRhcmdldCBmYWxzeT9cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgc2VydmVyIGFuZCBpcyB0aGUgc2hlZXQgZmFsc3k/XFxuXFxuXCIsNTpcIlRoZSBjbG9uZSBtZXRob2QgY2Fubm90IGJlIHVzZWQgb24gdGhlIGNsaWVudCFcXG5cXG4tIEFyZSB5b3UgcnVubmluZyBpbiBhIGNsaWVudC1saWtlIGVudmlyb25tZW50IG9uIHRoZSBzZXJ2ZXI/XFxuLSBBcmUgeW91IHRyeWluZyB0byBydW4gU1NSIG9uIHRoZSBjbGllbnQ/XFxuXFxuXCIsNjpcIlRyeWluZyB0byBpbnNlcnQgYSBuZXcgc3R5bGUgdGFnLCBidXQgdGhlIGdpdmVuIE5vZGUgaXMgdW5tb3VudGVkIVxcblxcbi0gQXJlIHlvdSB1c2luZyBhIGN1c3RvbSB0YXJnZXQgdGhhdCBpc24ndCBtb3VudGVkP1xcbi0gRG9lcyB5b3VyIGRvY3VtZW50IG5vdCBoYXZlIGEgdmFsaWQgaGVhZCBlbGVtZW50P1xcbi0gSGF2ZSB5b3UgYWNjaWRlbnRhbGx5IHJlbW92ZWQgYSBzdHlsZSB0YWcgbWFudWFsbHk/XFxuXFxuXCIsNzonVGhlbWVQcm92aWRlcjogUGxlYXNlIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIFwidGhlbWVcIiBwcm9wIGZ1bmN0aW9uLCBlLmcuXFxuXFxuYGBganNcXG50aGVtZT17KCkgPT4gKHt9KX1cXG5gYGBcXG5cXG4nLDg6J1RoZW1lUHJvdmlkZXI6IFBsZWFzZSBtYWtlIHlvdXIgXCJ0aGVtZVwiIHByb3AgYW4gb2JqZWN0LlxcblxcbicsOTpcIk1pc3NpbmcgZG9jdW1lbnQgYDxoZWFkPmBcXG5cXG5cIiwxMDpcIkNhbm5vdCBmaW5kIGEgU3R5bGVTaGVldCBpbnN0YW5jZS4gVXN1YWxseSB0aGlzIGhhcHBlbnMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvcGllcyBvZiBzdHlsZWQtY29tcG9uZW50cyBsb2FkZWQgYXQgb25jZS4gQ2hlY2sgb3V0IHRoaXMgaXNzdWUgZm9yIGhvdyB0byB0cm91Ymxlc2hvb3QgYW5kIGZpeCB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIHRoaXMgc2l0dWF0aW9uIGNhbiBoYXBwZW46IGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9pc3N1ZXMvMTk0MSNpc3N1ZWNvbW1lbnQtNDE3ODYyMDIxXFxuXFxuXCIsMTE6XCJfVGhpcyBlcnJvciB3YXMgcmVwbGFjZWQgd2l0aCBhIGRldi10aW1lIHdhcm5pbmcsIGl0IHdpbGwgYmUgZGVsZXRlZCBmb3IgdjQgZmluYWwuXyBbY3JlYXRlR2xvYmFsU3R5bGVdIHJlY2VpdmVkIGNoaWxkcmVuIHdoaWNoIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBQbGVhc2UgdXNlIHRoZSBjb21wb25lbnQgd2l0aG91dCBwYXNzaW5nIGNoaWxkcmVuIGVsZW1lbnRzLlxcblxcblwiLDEyOlwiSXQgc2VlbXMgeW91IGFyZSBpbnRlcnBvbGF0aW5nIGEga2V5ZnJhbWUgZGVjbGFyYXRpb24gKCVzKSBpbnRvIGFuIHVudGFnZ2VkIHN0cmluZy4gVGhpcyB3YXMgc3VwcG9ydGVkIGluIHN0eWxlZC1jb21wb25lbnRzIHYzLCBidXQgaXMgbm90IGxvbmdlciBzdXBwb3J0ZWQgaW4gdjQgYXMga2V5ZnJhbWVzIGFyZSBub3cgaW5qZWN0ZWQgb24tZGVtYW5kLiBQbGVhc2Ugd3JhcCB5b3VyIHN0cmluZyBpbiB0aGUgY3NzXFxcXGBcXFxcYCBoZWxwZXIgd2hpY2ggZW5zdXJlcyB0aGUgc3R5bGVzIGFyZSBpbmplY3RlZCBjb3JyZWN0bHkuIFNlZSBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9hcGkjY3NzXFxuXFxuXCIsMTM6XCIlcyBpcyBub3QgYSBzdHlsZWQgY29tcG9uZW50IGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gdmlhIGNvbXBvbmVudCBzZWxlY3Rvci4gU2VlIGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2FkdmFuY2VkI3JlZmVycmluZy10by1vdGhlci1jb21wb25lbnRzIGZvciBtb3JlIGRldGFpbHMuXFxuXFxuXCIsMTQ6J1RoZW1lUHJvdmlkZXI6IFwidGhlbWVcIiBwcm9wIGlzIHJlcXVpcmVkLlxcblxcbicsMTU6XCJBIHN0eWxpcyBwbHVnaW4gaGFzIGJlZW4gc3VwcGxpZWQgdGhhdCBpcyBub3QgbmFtZWQuIFdlIG5lZWQgYSBuYW1lIGZvciBlYWNoIHBsdWdpbiB0byBiZSBhYmxlIHRvIHByZXZlbnQgc3R5bGluZyBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IHN0eWxpcyBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHNhbWUgYXBwLiBCZWZvcmUgeW91IHBhc3MgeW91ciBwbHVnaW4gdG8gYDxTdHlsZVNoZWV0TWFuYWdlciBzdHlsaXNQbHVnaW5zPXtbXX0+YCwgcGxlYXNlIG1ha2Ugc3VyZSBlYWNoIHBsdWdpbiBpcyB1bmlxdWVseS1uYW1lZCwgZS5nLlxcblxcbmBgYGpzXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydGVkUGx1Z2luLCAnbmFtZScsIHsgdmFsdWU6ICdzb21lLXVuaXF1ZS1uYW1lJyB9KTtcXG5gYGBcXG5cXG5cIiwxNjpcIlJlYWNoZWQgdGhlIGxpbWl0IG9mIGhvdyBtYW55IHN0eWxlZCBjb21wb25lbnRzIG1heSBiZSBjcmVhdGVkIGF0IGdyb3VwICVzLlxcbllvdSBtYXkgb25seSBjcmVhdGUgdXAgdG8gMSwwNzMsNzQxLDgyNCBjb21wb25lbnRzLiBJZiB5b3UncmUgY3JlYXRpbmcgY29tcG9uZW50cyBkeW5hbWljYWxseSxcXG5hcyBmb3IgaW5zdGFuY2UgaW4geW91ciByZW5kZXIgbWV0aG9kIHRoZW4geW91IG1heSBiZSBydW5uaW5nIGludG8gdGhpcyBsaW1pdGF0aW9uLlxcblxcblwiLDE3OlwiQ1NTU3R5bGVTaGVldCBjb3VsZCBub3QgYmUgZm91bmQgb24gSFRNTFN0eWxlRWxlbWVudC5cXG5IYXMgc3R5bGVkLWNvbXBvbmVudHMnIHN0eWxlIHRhZyBiZWVuIHVubW91bnRlZCBvciBhbHRlcmVkIGJ5IGFub3RoZXIgc2NyaXB0P1xcblwifTp7fTtmdW5jdGlvbiBEKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGg8PTA/dm9pZCAwOmFyZ3VtZW50c1swXSx0PVtdLG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rPTEpdC5wdXNoKG48MHx8YXJndW1lbnRzLmxlbmd0aDw9bj92b2lkIDA6YXJndW1lbnRzW25dKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlPWUucmVwbGFjZSgvJVthLXpdLyx0KX0pKSxlfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3Rocm93XCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOVj9uZXcgRXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0LmlvL0pVSWFFI1wiK2UrXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIrKG4ubGVuZ3RoPjA/XCIgQXJnczogXCIrbi5qb2luKFwiLCBcIik6XCJcIikpOm5ldyBFcnJvcihELmFwcGx5KHZvaWQgMCxbUltlXV0uY29uY2F0KG4pKS50cmltKCkpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmdyb3VwU2l6ZXM9bmV3IFVpbnQzMkFycmF5KDUxMiksdGhpcy5sZW5ndGg9NTEyLHRoaXMudGFnPWV9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5kZXhPZkdyb3VwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49MDtuPGU7bisrKXQrPXRoaXMuZ3JvdXBTaXplc1tuXTtyZXR1cm4gdH0sdC5pbnNlcnRSdWxlcz1mdW5jdGlvbihlLHQpe2lmKGU+PXRoaXMuZ3JvdXBTaXplcy5sZW5ndGgpe2Zvcih2YXIgbj10aGlzLmdyb3VwU2l6ZXMscj1uLmxlbmd0aCxvPXI7ZT49bzspKG88PD0xKTwwJiZqKDE2LFwiXCIrZSk7dGhpcy5ncm91cFNpemVzPW5ldyBVaW50MzJBcnJheShvKSx0aGlzLmdyb3VwU2l6ZXMuc2V0KG4pLHRoaXMubGVuZ3RoPW87Zm9yKHZhciBzPXI7czxvO3MrKyl0aGlzLmdyb3VwU2l6ZXNbc109MH1mb3IodmFyIGk9dGhpcy5pbmRleE9mR3JvdXAoZSsxKSxhPTAsYz10Lmxlbmd0aDthPGM7YSsrKXRoaXMudGFnLmluc2VydFJ1bGUoaSx0W2FdKSYmKHRoaXMuZ3JvdXBTaXplc1tlXSsrLGkrKyl9LHQuY2xlYXJHcm91cD1mdW5jdGlvbihlKXtpZihlPHRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmdyb3VwU2l6ZXNbZV0sbj10aGlzLmluZGV4T2ZHcm91cChlKSxyPW4rdDt0aGlzLmdyb3VwU2l6ZXNbZV09MDtmb3IodmFyIG89bjtvPHI7bysrKXRoaXMudGFnLmRlbGV0ZVJ1bGUobil9fSx0LmdldEdyb3VwPWZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7aWYoZT49dGhpcy5sZW5ndGh8fDA9PT10aGlzLmdyb3VwU2l6ZXNbZV0pcmV0dXJuIHQ7Zm9yKHZhciBuPXRoaXMuZ3JvdXBTaXplc1tlXSxyPXRoaXMuaW5kZXhPZkdyb3VwKGUpLG89cituLHM9cjtzPG87cysrKXQrPXRoaXMudGFnLmdldFJ1bGUocykrXCIvKiFzYyovXFxuXCI7cmV0dXJuIHR9LGV9KCkseD1uZXcgTWFwLGs9bmV3IE1hcCxWPTEsQj1mdW5jdGlvbihlKXtpZih4LmhhcyhlKSlyZXR1cm4geC5nZXQoZSk7Zm9yKDtrLmhhcyhWKTspVisrO3ZhciB0PVYrKztyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYoKDB8dCk8MHx8dD4xPDwzMCkmJmooMTYsXCJcIit0KSx4LnNldChlLHQpLGsuc2V0KHQsZSksdH0sej1mdW5jdGlvbihlKXtyZXR1cm4gay5nZXQoZSl9LE09ZnVuY3Rpb24oZSx0KXt0Pj1WJiYoVj10KzEpLHguc2V0KGUsdCksay5zZXQodCxlKX0sRz1cInN0eWxlW1wiK0ErJ11bZGF0YS1zdHlsZWQtdmVyc2lvbj1cIjUuMy4zXCJdJyxMPW5ldyBSZWdFeHAoXCJeXCIrQSsnXFxcXC5nKFxcXFxkKylcXFxcW2lkPVwiKFtcXFxcd1xcXFxkLV0rKVwiXFxcXF0uKj9cIihbXlwiXSopJyksRj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG89bi5zcGxpdChcIixcIikscz0wLGk9by5sZW5ndGg7czxpO3MrKykocj1vW3NdKSYmZS5yZWdpc3Rlck5hbWUodCxyKX0sWT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0odC50ZXh0Q29udGVudHx8XCJcIikuc3BsaXQoXCIvKiFzYyovXFxuXCIpLHI9W10sbz0wLHM9bi5sZW5ndGg7bzxzO28rKyl7dmFyIGk9bltvXS50cmltKCk7aWYoaSl7dmFyIGE9aS5tYXRjaChMKTtpZihhKXt2YXIgYz0wfHBhcnNlSW50KGFbMV0sMTApLHU9YVsyXTswIT09YyYmKE0odSxjKSxGKGUsdSxhWzNdKSxlLmdldFRhZygpLmluc2VydFJ1bGVzKGMscikpLHIubGVuZ3RoPTB9ZWxzZSByLnB1c2goaSl9fX0scT1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5fX3dlYnBhY2tfbm9uY2VfXz93aW5kb3cuX193ZWJwYWNrX25vbmNlX186bnVsbH0sSD1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5oZWFkLG49ZXx8dCxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNoaWxkTm9kZXMsbj10Lmxlbmd0aDtuPj0wO24tLSl7dmFyIHI9dFtuXTtpZihyJiYxPT09ci5ub2RlVHlwZSYmci5oYXNBdHRyaWJ1dGUoQSkpcmV0dXJuIHJ9fShuKSxzPXZvaWQgMCE9PW8/by5uZXh0U2libGluZzpudWxsO3Iuc2V0QXR0cmlidXRlKEEsXCJhY3RpdmVcIiksci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlZC12ZXJzaW9uXCIsXCI1LjMuM1wiKTt2YXIgaT1xKCk7cmV0dXJuIGkmJnIuc2V0QXR0cmlidXRlKFwibm9uY2VcIixpKSxuLmluc2VydEJlZm9yZShyLHMpLHJ9LCQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXMuZWxlbWVudD1IKGUpO3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpLHRoaXMuc2hlZXQ9ZnVuY3Rpb24oZSl7aWYoZS5zaGVldClyZXR1cm4gZS5zaGVldDtmb3IodmFyIHQ9ZG9jdW1lbnQuc3R5bGVTaGVldHMsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7dmFyIG89dFtuXTtpZihvLm93bmVyTm9kZT09PWUpcmV0dXJuIG99aigxNyl9KHQpLHRoaXMubGVuZ3RoPTB9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5zZXJ0UnVsZT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5zaGVldC5pbnNlcnRSdWxlKHQsZSksdGhpcy5sZW5ndGgrKywhMH1jYXRjaChlKXtyZXR1cm4hMX19LHQuZGVsZXRlUnVsZT1mdW5jdGlvbihlKXt0aGlzLnNoZWV0LmRlbGV0ZVJ1bGUoZSksdGhpcy5sZW5ndGgtLX0sdC5nZXRSdWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2hlZXQuY3NzUnVsZXNbZV07cmV0dXJuIHZvaWQgMCE9PXQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmNzc1RleHQ/dC5jc3NUZXh0OlwiXCJ9LGV9KCksVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpcy5lbGVtZW50PUgoZSk7dGhpcy5ub2Rlcz10LmNoaWxkTm9kZXMsdGhpcy5sZW5ndGg9MH12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5pbnNlcnRSdWxlPWZ1bmN0aW9uKGUsdCl7aWYoZTw9dGhpcy5sZW5ndGgmJmU+PTApe3ZhciBuPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpLHI9dGhpcy5ub2Rlc1tlXTtyZXR1cm4gdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShuLHJ8fG51bGwpLHRoaXMubGVuZ3RoKyssITB9cmV0dXJuITF9LHQuZGVsZXRlUnVsZT1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1tlXSksdGhpcy5sZW5ndGgtLX0sdC5nZXRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMubGVuZ3RoP3RoaXMubm9kZXNbZV0udGV4dENvbnRlbnQ6XCJcIn0sZX0oKSxVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnJ1bGVzPVtdLHRoaXMubGVuZ3RoPTB9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5zZXJ0UnVsZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPD10aGlzLmxlbmd0aCYmKHRoaXMucnVsZXMuc3BsaWNlKGUsMCx0KSx0aGlzLmxlbmd0aCsrLCEwKX0sdC5kZWxldGVSdWxlPWZ1bmN0aW9uKGUpe3RoaXMucnVsZXMuc3BsaWNlKGUsMSksdGhpcy5sZW5ndGgtLX0sdC5nZXRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMubGVuZ3RoP3RoaXMucnVsZXNbZV06XCJcIn0sZX0oKSxKPUksWD17aXNTZXJ2ZXI6IUksdXNlQ1NTT01JbmplY3Rpb246IVB9LFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT1lJiYoZT1FKSx2b2lkIDA9PT10JiYodD17fSksdGhpcy5vcHRpb25zPXYoe30sWCx7fSxlKSx0aGlzLmdzPXQsdGhpcy5uYW1lcz1uZXcgTWFwKG4pLHRoaXMuc2VydmVyPSEhZS5pc1NlcnZlciwhdGhpcy5zZXJ2ZXImJkkmJkomJihKPSExLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKEcpLG49MCxyPXQubGVuZ3RoO248cjtuKyspe3ZhciBvPXRbbl07byYmXCJhY3RpdmVcIiE9PW8uZ2V0QXR0cmlidXRlKEEpJiYoWShlLG8pLG8ucGFyZW50Tm9kZSYmby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pKX19KHRoaXMpKX1lLnJlZ2lzdGVySWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEIoZSl9O3ZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnJlY29uc3RydWN0V2l0aE9wdGlvbnM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITApLG5ldyBlKHYoe30sdGhpcy5vcHRpb25zLHt9LHQpLHRoaXMuZ3MsbiYmdGhpcy5uYW1lc3x8dm9pZCAwKX0sdC5hbGxvY2F0ZUdTSW5zdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ3NbZV09KHRoaXMuZ3NbZV18fDApKzF9LHQuZ2V0VGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnfHwodGhpcy50YWc9KG49KHQ9dGhpcy5vcHRpb25zKS5pc1NlcnZlcixyPXQudXNlQ1NTT01JbmplY3Rpb24sbz10LnRhcmdldCxlPW4/bmV3IFUobyk6cj9uZXcgJChvKTpuZXcgVyhvKSxuZXcgVChlKSkpO3ZhciBlLHQsbixyLG99LHQuaGFzTmFtZUZvcklkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubmFtZXMuaGFzKGUpJiZ0aGlzLm5hbWVzLmdldChlKS5oYXModCl9LHQucmVnaXN0ZXJOYW1lPWZ1bmN0aW9uKGUsdCl7aWYoQihlKSx0aGlzLm5hbWVzLmhhcyhlKSl0aGlzLm5hbWVzLmdldChlKS5hZGQodCk7ZWxzZXt2YXIgbj1uZXcgU2V0O24uYWRkKHQpLHRoaXMubmFtZXMuc2V0KGUsbil9fSx0Lmluc2VydFJ1bGVzPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnJlZ2lzdGVyTmFtZShlLHQpLHRoaXMuZ2V0VGFnKCkuaW5zZXJ0UnVsZXMoQihlKSxuKX0sdC5jbGVhck5hbWVzPWZ1bmN0aW9uKGUpe3RoaXMubmFtZXMuaGFzKGUpJiZ0aGlzLm5hbWVzLmdldChlKS5jbGVhcigpfSx0LmNsZWFyUnVsZXM9ZnVuY3Rpb24oZSl7dGhpcy5nZXRUYWcoKS5jbGVhckdyb3VwKEIoZSkpLHRoaXMuY2xlYXJOYW1lcyhlKX0sdC5jbGVhclRhZz1mdW5jdGlvbigpe3RoaXMudGFnPXZvaWQgMH0sdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRUYWcoKSxuPXQubGVuZ3RoLHI9XCJcIixvPTA7bzxuO28rKyl7dmFyIHM9eihvKTtpZih2b2lkIDAhPT1zKXt2YXIgaT1lLm5hbWVzLmdldChzKSxhPXQuZ2V0R3JvdXAobyk7aWYoaSYmYSYmaS5zaXplKXt2YXIgYz1BK1wiLmdcIitvKydbaWQ9XCInK3MrJ1wiXScsdT1cIlwiO3ZvaWQgMCE9PWkmJmkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5sZW5ndGg+MCYmKHUrPWUrXCIsXCIpfSkpLHIrPVwiXCIrYStjKyd7Y29udGVudDpcIicrdSsnXCJ9Lyohc2MqL1xcbid9fX1yZXR1cm4gcn0odGhpcyl9LGV9KCksSz0vKGEpKGQpL2dpLFE9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiBlZShlKXt2YXIgdCxuPVwiXCI7Zm9yKHQ9TWF0aC5hYnMoZSk7dD41Mjt0PXQvNTJ8MCluPVEodCU1MikrbjtyZXR1cm4oUSh0JTUyKStuKS5yZXBsYWNlKEssXCIkMS0kMlwiKX12YXIgdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5sZW5ndGg7bjspZT0zMyplXnQuY2hhckNvZGVBdCgtLW4pO3JldHVybiBlfSxuZT1mdW5jdGlvbihlKXtyZXR1cm4gdGUoNTM4MSxlKX07ZnVuY3Rpb24gcmUoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgbj1lW3RdO2lmKGIobikmJiFOKG4pKXJldHVybiExfXJldHVybiEwfXZhciBvZT1uZShcIjUuMy4zXCIpLHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5ydWxlcz1lLHRoaXMuc3RhdGljUnVsZXNJZD1cIlwiLHRoaXMuaXNTdGF0aWM9XCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOViYmKHZvaWQgMD09PW58fG4uaXNTdGF0aWMpJiZyZShlKSx0aGlzLmNvbXBvbmVudElkPXQsdGhpcy5iYXNlSGFzaD10ZShvZSx0KSx0aGlzLmJhc2VTdHlsZT1uLFoucmVnaXN0ZXJJZCh0KX1yZXR1cm4gZS5wcm90b3R5cGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuY29tcG9uZW50SWQsbz1bXTtpZih0aGlzLmJhc2VTdHlsZSYmby5wdXNoKHRoaXMuYmFzZVN0eWxlLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKGUsdCxuKSksdGhpcy5pc1N0YXRpYyYmIW4uaGFzaClpZih0aGlzLnN0YXRpY1J1bGVzSWQmJnQuaGFzTmFtZUZvcklkKHIsdGhpcy5zdGF0aWNSdWxlc0lkKSlvLnB1c2godGhpcy5zdGF0aWNSdWxlc0lkKTtlbHNle3ZhciBzPU5lKHRoaXMucnVsZXMsZSx0LG4pLmpvaW4oXCJcIiksaT1lZSh0ZSh0aGlzLmJhc2VIYXNoLHMpPj4+MCk7aWYoIXQuaGFzTmFtZUZvcklkKHIsaSkpe3ZhciBhPW4ocyxcIi5cIitpLHZvaWQgMCxyKTt0Lmluc2VydFJ1bGVzKHIsaSxhKX1vLnB1c2goaSksdGhpcy5zdGF0aWNSdWxlc0lkPWl9ZWxzZXtmb3IodmFyIGM9dGhpcy5ydWxlcy5sZW5ndGgsdT10ZSh0aGlzLmJhc2VIYXNoLG4uaGFzaCksbD1cIlwiLGQ9MDtkPGM7ZCsrKXt2YXIgaD10aGlzLnJ1bGVzW2RdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBoKWwrPWgsXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmKHU9dGUodSxoK2QpKTtlbHNlIGlmKGgpe3ZhciBwPU5lKGgsZSx0LG4pLGY9QXJyYXkuaXNBcnJheShwKT9wLmpvaW4oXCJcIik6cDt1PXRlKHUsZitkKSxsKz1mfX1pZihsKXt2YXIgbT1lZSh1Pj4+MCk7aWYoIXQuaGFzTmFtZUZvcklkKHIsbSkpe3ZhciB5PW4obCxcIi5cIittLHZvaWQgMCxyKTt0Lmluc2VydFJ1bGVzKHIsbSx5KX1vLnB1c2gobSl9fXJldHVybiBvLmpvaW4oXCIgXCIpfSxlfSgpLGllPS9eXFxzKlxcL1xcLy4qJC9nbSxhZT1bXCI6XCIsXCJbXCIsXCIuXCIsXCIjXCJdO2Z1bmN0aW9uIGNlKGUpe3ZhciB0LG4scixvLHM9dm9pZCAwPT09ZT9FOmUsaT1zLm9wdGlvbnMsYT12b2lkIDA9PT1pP0U6aSxjPXMucGx1Z2lucyx1PXZvaWQgMD09PWM/dzpjLGw9bmV3IHAoYSksZD1bXSxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7aWYodCl0cnl7ZSh0K1wifVwiKX1jYXRjaChlKXt9fXJldHVybiBmdW5jdGlvbihuLHIsbyxzLGksYSxjLHUsbCxkKXtzd2l0Y2gobil7Y2FzZSAxOmlmKDA9PT1sJiY2ND09PXIuY2hhckNvZGVBdCgwKSlyZXR1cm4gZShyK1wiO1wiKSxcIlwiO2JyZWFrO2Nhc2UgMjppZigwPT09dSlyZXR1cm4gcitcIi8qfCovXCI7YnJlYWs7Y2FzZSAzOnN3aXRjaCh1KXtjYXNlIDEwMjpjYXNlIDExMjpyZXR1cm4gZShvWzBdK3IpLFwiXCI7ZGVmYXVsdDpyZXR1cm4gcisoMD09PWQ/XCIvKnwqL1wiOlwiXCIpfWNhc2UtMjpyLnNwbGl0KFwiLyp8Ki99XCIpLmZvckVhY2godCl9fX0oKGZ1bmN0aW9uKGUpe2QucHVzaChlKX0pKSxmPWZ1bmN0aW9uKGUscixzKXtyZXR1cm4gMD09PXImJi0xIT09YWUuaW5kZXhPZihzW24ubGVuZ3RoXSl8fHMubWF0Y2gobyk/ZTpcIi5cIit0fTtmdW5jdGlvbiBtKGUscyxpLGEpe3ZvaWQgMD09PWEmJihhPVwiJlwiKTt2YXIgYz1lLnJlcGxhY2UoaWUsXCJcIiksdT1zJiZpP2krXCIgXCIrcytcIiB7IFwiK2MrXCIgfVwiOmM7cmV0dXJuIHQ9YSxuPXMscj1uZXcgUmVnRXhwKFwiXFxcXFwiK24rXCJcXFxcYlwiLFwiZ1wiKSxvPW5ldyBSZWdFeHAoXCIoXFxcXFwiK24rXCJcXFxcYil7Mix9XCIpLGwoaXx8IXM/XCJcIjpzLHUpfXJldHVybiBsLnVzZShbXS5jb25jYXQodSxbZnVuY3Rpb24oZSx0LG8pezI9PT1lJiZvLmxlbmd0aCYmb1swXS5sYXN0SW5kZXhPZihuKT4wJiYob1swXT1vWzBdLnJlcGxhY2UocixmKSl9LGgsZnVuY3Rpb24oZSl7aWYoLTI9PT1lKXt2YXIgdD1kO3JldHVybiBkPVtdLHR9fV0pKSxtLmhhc2g9dS5sZW5ndGg/dS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubmFtZXx8aigxNSksdGUoZSx0Lm5hbWUpfSksNTM4MSkudG9TdHJpbmcoKTpcIlwiLG19dmFyIHVlPXIuY3JlYXRlQ29udGV4dCgpLGxlPXVlLkNvbnN1bWVyLGRlPXIuY3JlYXRlQ29udGV4dCgpLGhlPShkZS5Db25zdW1lcixuZXcgWikscGU9Y2UoKTtmdW5jdGlvbiBmZSgpe3JldHVybiBzKHVlKXx8aGV9ZnVuY3Rpb24gbWUoKXtyZXR1cm4gcyhkZSl8fHBlfWZ1bmN0aW9uIHllKGUpe3ZhciB0PW8oZS5zdHlsaXNQbHVnaW5zKSxuPXRbMF0scz10WzFdLGM9ZmUoKSx1PWkoKGZ1bmN0aW9uKCl7dmFyIHQ9YztyZXR1cm4gZS5zaGVldD90PWUuc2hlZXQ6ZS50YXJnZXQmJih0PXQucmVjb25zdHJ1Y3RXaXRoT3B0aW9ucyh7dGFyZ2V0OmUudGFyZ2V0fSwhMSkpLGUuZGlzYWJsZUNTU09NSW5qZWN0aW9uJiYodD10LnJlY29uc3RydWN0V2l0aE9wdGlvbnMoe3VzZUNTU09NSW5qZWN0aW9uOiExfSkpLHR9KSxbZS5kaXNhYmxlQ1NTT01JbmplY3Rpb24sZS5zaGVldCxlLnRhcmdldF0pLGw9aSgoZnVuY3Rpb24oKXtyZXR1cm4gY2Uoe29wdGlvbnM6e3ByZWZpeDohZS5kaXNhYmxlVmVuZG9yUHJlZml4ZXN9LHBsdWdpbnM6bn0pfSksW2UuZGlzYWJsZVZlbmRvclByZWZpeGVzLG5dKTtyZXR1cm4gYSgoZnVuY3Rpb24oKXtoKG4sZS5zdHlsaXNQbHVnaW5zKXx8cyhlLnN0eWxpc1BsdWdpbnMpfSksW2Uuc3R5bGlzUGx1Z2luc10pLHIuY3JlYXRlRWxlbWVudCh1ZS5Qcm92aWRlcix7dmFsdWU6dX0sci5jcmVhdGVFbGVtZW50KGRlLlByb3ZpZGVyLHt2YWx1ZTpsfSxcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WP3IuQ2hpbGRyZW4ub25seShlLmNoaWxkcmVuKTplLmNoaWxkcmVuKSl9dmFyIHZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dGhpcy5pbmplY3Q9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1wZSk7dmFyIHI9bi5uYW1lK3QuaGFzaDtlLmhhc05hbWVGb3JJZChuLmlkLHIpfHxlLmluc2VydFJ1bGVzKG4uaWQscix0KG4ucnVsZXMscixcIkBrZXlmcmFtZXNcIikpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGooMTIsU3RyaW5nKG4ubmFtZSkpfSx0aGlzLm5hbWU9ZSx0aGlzLmlkPVwic2Mta2V5ZnJhbWVzLVwiK2UsdGhpcy5ydWxlcz10fXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1wZSksdGhpcy5uYW1lK2UuaGFzaH0sZX0oKSxnZT0vKFtBLVpdKS8sU2U9LyhbQS1aXSkvZyx3ZT0vXm1zLS8sRWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCItXCIrZS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBiZShlKXtyZXR1cm4gZ2UudGVzdChlKT9lLnJlcGxhY2UoU2UsRWUpLnJlcGxhY2Uod2UsXCItbXMtXCIpOmV9dmFyIF9lPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV8fFwiXCI9PT1lfTtmdW5jdGlvbiBOZShlLG4scixvKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHMsaT1bXSxhPTAsYz1lLmxlbmd0aDthPGM7YSs9MSlcIlwiIT09KHM9TmUoZVthXSxuLHIsbykpJiYoQXJyYXkuaXNBcnJheShzKT9pLnB1c2guYXBwbHkoaSxzKTppLnB1c2gocykpO3JldHVybiBpfWlmKF9lKGUpKXJldHVyblwiXCI7aWYoTihlKSlyZXR1cm5cIi5cIitlLnN0eWxlZENvbXBvbmVudElkO2lmKGIoZSkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mKGw9ZSl8fGwucHJvdG90eXBlJiZsLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHwhbilyZXR1cm4gZTt2YXIgdT1lKG4pO3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJnQodSkmJmNvbnNvbGUud2FybihfKGUpK1wiIGlzIG5vdCBhIHN0eWxlZCBjb21wb25lbnQgYW5kIGNhbm5vdCBiZSByZWZlcnJlZCB0byB2aWEgY29tcG9uZW50IHNlbGVjdG9yLiBTZWUgaHR0cHM6Ly93d3cuc3R5bGVkLWNvbXBvbmVudHMuY29tL2RvY3MvYWR2YW5jZWQjcmVmZXJyaW5nLXRvLW90aGVyLWNvbXBvbmVudHMgZm9yIG1vcmUgZGV0YWlscy5cIiksTmUodSxuLHIsbyl9dmFyIGw7cmV0dXJuIGUgaW5zdGFuY2VvZiB2ZT9yPyhlLmluamVjdChyLG8pLGUuZ2V0TmFtZShvKSk6ZTpTKGUpP2Z1bmN0aW9uIGUodCxuKXt2YXIgcixvLHM9W107Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmIV9lKHRbaV0pJiYoQXJyYXkuaXNBcnJheSh0W2ldKSYmdFtpXS5pc0Nzc3x8Yih0W2ldKT9zLnB1c2goYmUoaSkrXCI6XCIsdFtpXSxcIjtcIik6Uyh0W2ldKT9zLnB1c2guYXBwbHkocyxlKHRbaV0saSkpOnMucHVzaChiZShpKStcIjogXCIrKHI9aSxudWxsPT0obz10W2ldKXx8XCJib29sZWFuXCI9PXR5cGVvZiBvfHxcIlwiPT09bz9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiBvfHwwPT09b3x8ciBpbiBmP1N0cmluZyhvKS50cmltKCk6bytcInB4XCIpK1wiO1wiKSk7cmV0dXJuIG4/W24rXCIge1wiXS5jb25jYXQocyxbXCJ9XCJdKTpzfShlKTplLnRvU3RyaW5nKCl9dmFyIEFlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYoZS5pc0Nzcz0hMCksZX07ZnVuY3Rpb24gQ2UoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBiKGUpfHxTKGUpP0FlKE5lKGcodyxbZV0uY29uY2F0KG4pKSkpOjA9PT1uLmxlbmd0aCYmMT09PWUubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgZVswXT9lOkFlKE5lKGcoZSxuKSkpfXZhciBJZT0vaW52YWxpZCBob29rIGNhbGwvaSxQZT1uZXcgU2V0LE9lPWZ1bmN0aW9uKGUsdCl7aWYoXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOVil7dmFyIG49XCJUaGUgY29tcG9uZW50IFwiK2UrKHQ/JyB3aXRoIHRoZSBpZCBvZiBcIicrdCsnXCInOlwiXCIpK1wiIGhhcyBiZWVuIGNyZWF0ZWQgZHluYW1pY2FsbHkuXFxuWW91IG1heSBzZWUgdGhpcyB3YXJuaW5nIGJlY2F1c2UgeW91J3ZlIGNhbGxlZCBzdHlsZWQgaW5zaWRlIGFub3RoZXIgY29tcG9uZW50LlxcblRvIHJlc29sdmUgdGhpcyBvbmx5IGNyZWF0ZSBuZXcgU3R5bGVkQ29tcG9uZW50cyBvdXRzaWRlIG9mIGFueSByZW5kZXIgbWV0aG9kIGFuZCBmdW5jdGlvbiBjb21wb25lbnQuXCIscj1jb25zb2xlLmVycm9yO3RyeXt2YXIgbz0hMDtjb25zb2xlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKEllLnRlc3QoZSkpbz0hMSxQZS5kZWxldGUobik7ZWxzZXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheSh0PjE/dC0xOjApLGk9MTtpPHQ7aSsrKXNbaS0xXT1hcmd1bWVudHNbaV07ci5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChzKSl9fSxjKCksbyYmIVBlLmhhcyhuKSYmKGNvbnNvbGUud2FybihuKSxQZS5hZGQobikpfWNhdGNoKGUpe0llLnRlc3QoZS5tZXNzYWdlKSYmUGUuZGVsZXRlKG4pfWZpbmFsbHl7Y29uc29sZS5lcnJvcj1yfX19LFJlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49RSksZS50aGVtZSE9PW4udGhlbWUmJmUudGhlbWV8fHR8fG4udGhlbWV9LERlPS9bIVwiIyQlJicoKSorLC4vOjs8PT4/QFtcXFxcXFxdXmB7fH1+LV0rL2csamU9LyheLXwtJCkvZztmdW5jdGlvbiBUZShlKXtyZXR1cm4gZS5yZXBsYWNlKERlLFwiLVwiKS5yZXBsYWNlKGplLFwiXCIpfXZhciB4ZT1mdW5jdGlvbihlKXtyZXR1cm4gZWUobmUoZSk+Pj4wKX07ZnVuY3Rpb24ga2UoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihcInByb2R1Y3Rpb25cIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WfHxlLmNoYXJBdCgwKT09PWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpfXZhciBWZT1mdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfHxcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJiFBcnJheS5pc0FycmF5KGUpfSxCZT1mdW5jdGlvbihlKXtyZXR1cm5cIl9fcHJvdG9fX1wiIT09ZSYmXCJjb25zdHJ1Y3RvclwiIT09ZSYmXCJwcm90b3R5cGVcIiE9PWV9O2Z1bmN0aW9uIHplKGUsdCxuKXt2YXIgcj1lW25dO1ZlKHQpJiZWZShyKT9NZShyLHQpOmVbbl09dH1mdW5jdGlvbiBNZShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bysrKXt2YXIgaT1zW29dO2lmKFZlKGkpKWZvcih2YXIgYSBpbiBpKUJlKGEpJiZ6ZShlLGlbYV0sYSl9cmV0dXJuIGV9dmFyIEdlPXIuY3JlYXRlQ29udGV4dCgpLExlPUdlLkNvbnN1bWVyO2Z1bmN0aW9uIEZlKGUpe3ZhciB0PXMoR2UpLG49aSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gaigxNCk7aWYoYihlKSl7dmFyIG49ZSh0KTtyZXR1cm5cInByb2R1Y3Rpb25cIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WfHxudWxsIT09biYmIUFycmF5LmlzQXJyYXkobikmJlwib2JqZWN0XCI9PXR5cGVvZiBuP246aig3KX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8XCJvYmplY3RcIiE9dHlwZW9mIGU/aig4KTp0P3Yoe30sdCx7fSxlKTplfShlLnRoZW1lLHQpfSksW2UudGhlbWUsdF0pO3JldHVybiBlLmNoaWxkcmVuP3IuY3JlYXRlRWxlbWVudChHZS5Qcm92aWRlcix7dmFsdWU6bn0sZS5jaGlsZHJlbik6bnVsbH12YXIgWWU9e307ZnVuY3Rpb24gcWUoZSx0LG4pe3ZhciBvPU4oZSksaT0ha2UoZSksYT10LmF0dHJzLGM9dm9pZCAwPT09YT93OmEsZD10LmNvbXBvbmVudElkLGg9dm9pZCAwPT09ZD9mdW5jdGlvbihlLHQpe3ZhciBuPVwic3RyaW5nXCIhPXR5cGVvZiBlP1wic2NcIjpUZShlKTtZZVtuXT0oWWVbbl18fDApKzE7dmFyIHI9bitcIi1cIit4ZShcIjUuMy4zXCIrbitZZVtuXSk7cmV0dXJuIHQ/dCtcIi1cIityOnJ9KHQuZGlzcGxheU5hbWUsdC5wYXJlbnRDb21wb25lbnRJZCk6ZCxwPXQuZGlzcGxheU5hbWUsZj12b2lkIDA9PT1wP2Z1bmN0aW9uKGUpe3JldHVybiBrZShlKT9cInN0eWxlZC5cIitlOlwiU3R5bGVkKFwiK18oZSkrXCIpXCJ9KGUpOnAsZz10LmRpc3BsYXlOYW1lJiZ0LmNvbXBvbmVudElkP1RlKHQuZGlzcGxheU5hbWUpK1wiLVwiK3QuY29tcG9uZW50SWQ6dC5jb21wb25lbnRJZHx8aCxTPW8mJmUuYXR0cnM/QXJyYXkucHJvdG90eXBlLmNvbmNhdChlLmF0dHJzLGMpLmZpbHRlcihCb29sZWFuKTpjLEE9dC5zaG91bGRGb3J3YXJkUHJvcDtvJiZlLnNob3VsZEZvcndhcmRQcm9wJiYoQT10LnNob3VsZEZvcndhcmRQcm9wP2Z1bmN0aW9uKG4scixvKXtyZXR1cm4gZS5zaG91bGRGb3J3YXJkUHJvcChuLHIsbykmJnQuc2hvdWxkRm9yd2FyZFByb3AobixyLG8pfTplLnNob3VsZEZvcndhcmRQcm9wKTt2YXIgQyxJPW5ldyBzZShuLGcsbz9lLmNvbXBvbmVudFN0eWxlOnZvaWQgMCksUD1JLmlzU3RhdGljJiYwPT09Yy5sZW5ndGgsTz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLmF0dHJzLGk9ZS5jb21wb25lbnRTdHlsZSxhPWUuZGVmYXVsdFByb3BzLGM9ZS5mb2xkZWRDb21wb25lbnRJZHMsZD1lLnNob3VsZEZvcndhcmRQcm9wLGg9ZS5zdHlsZWRDb21wb25lbnRJZCxwPWUudGFyZ2V0O1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmwoaCk7dmFyIGY9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PWUmJihlPUUpO3ZhciByPXYoe30sdCx7dGhlbWU6ZX0pLG89e307cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQsbixzLGk9ZTtmb3IodCBpbiBiKGkpJiYoaT1pKHIpKSxpKXJbdF09b1t0XT1cImNsYXNzTmFtZVwiPT09dD8obj1vW3RdLHM9aVt0XSxuJiZzP24rXCIgXCIrczpufHxzKTppW3RdfSkpLFtyLG9dfShSZSh0LHMoR2UpLGEpfHxFLHQsbykseT1mWzBdLGc9ZlsxXSxTPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWZlKCkscz1tZSgpLGk9dD9lLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKEUsbyxzKTplLmdlbmVyYXRlQW5kSW5qZWN0U3R5bGVzKG4sbyxzKTtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZsKGkpLFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJiF0JiZyJiZyKGkpLGl9KGkscix5LFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlY/ZS53YXJuVG9vTWFueUNsYXNzZXM6dm9pZCAwKSx3PW4sXz1nLiRhc3x8dC4kYXN8fGcuYXN8fHQuYXN8fHAsTj1rZShfKSxBPWchPT10P3Yoe30sdCx7fSxnKTp0LEM9e307Zm9yKHZhciBJIGluIEEpXCIkXCIhPT1JWzBdJiZcImFzXCIhPT1JJiYoXCJmb3J3YXJkZWRBc1wiPT09ST9DLmFzPUFbSV06KGQ/ZChJLG0sXyk6IU58fG0oSSkpJiYoQ1tJXT1BW0ldKSk7cmV0dXJuIHQuc3R5bGUmJmcuc3R5bGUhPT10LnN0eWxlJiYoQy5zdHlsZT12KHt9LHQuc3R5bGUse30sZy5zdHlsZSkpLEMuY2xhc3NOYW1lPUFycmF5LnByb3RvdHlwZS5jb25jYXQoYyxoLFMhPT1oP1M6bnVsbCx0LmNsYXNzTmFtZSxnLmNsYXNzTmFtZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLEMucmVmPXcsdShfLEMpfShDLGUsdCxQKX07cmV0dXJuIE8uZGlzcGxheU5hbWU9ZiwoQz1yLmZvcndhcmRSZWYoTykpLmF0dHJzPVMsQy5jb21wb25lbnRTdHlsZT1JLEMuZGlzcGxheU5hbWU9ZixDLnNob3VsZEZvcndhcmRQcm9wPUEsQy5mb2xkZWRDb21wb25lbnRJZHM9bz9BcnJheS5wcm90b3R5cGUuY29uY2F0KGUuZm9sZGVkQ29tcG9uZW50SWRzLGUuc3R5bGVkQ29tcG9uZW50SWQpOncsQy5zdHlsZWRDb21wb25lbnRJZD1nLEMudGFyZ2V0PW8/ZS50YXJnZXQ6ZSxDLndpdGhDb21wb25lbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jb21wb25lbnRJZCxvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30scz1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKW49c1tyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfSh0LFtcImNvbXBvbmVudElkXCJdKSxzPXImJnIrXCItXCIrKGtlKGUpP2U6VGUoXyhlKSkpO3JldHVybiBxZShlLHYoe30sbyx7YXR0cnM6Uyxjb21wb25lbnRJZDpzfSksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLFwiZGVmYXVsdFByb3BzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb2xkZWREZWZhdWx0UHJvcHM9bz9NZSh7fSxlLmRlZmF1bHRQcm9wcyx0KTp0fX0pLFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJihPZShmLGcpLEMud2FyblRvb01hbnlDbGFzc2VzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e30scj0hMTtyZXR1cm4gZnVuY3Rpb24obyl7aWYoIXImJihuW29dPSEwLE9iamVjdC5rZXlzKG4pLmxlbmd0aD49MjAwKSl7dmFyIHM9dD8nIHdpdGggdGhlIGlkIG9mIFwiJyt0KydcIic6XCJcIjtjb25zb2xlLndhcm4oXCJPdmVyIDIwMCBjbGFzc2VzIHdlcmUgZ2VuZXJhdGVkIGZvciBjb21wb25lbnQgXCIrZStzK1wiLlxcbkNvbnNpZGVyIHVzaW5nIHRoZSBhdHRycyBtZXRob2QsIHRvZ2V0aGVyIHdpdGggYSBzdHlsZSBvYmplY3QgZm9yIGZyZXF1ZW50bHkgY2hhbmdlZCBzdHlsZXMuXFxuRXhhbXBsZTpcXG4gIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZC5kaXYuYXR0cnMocHJvcHMgPT4gKHtcXG4gICAgc3R5bGU6IHtcXG4gICAgICBiYWNrZ3JvdW5kOiBwcm9wcy5iYWNrZ3JvdW5kLFxcbiAgICB9LFxcbiAgfSkpYHdpZHRoOiAxMDAlO2BcXG5cXG4gIDxDb21wb25lbnQgLz5cIikscj0hMCxuPXt9fX19KGYsZykpLEMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIi5cIitDLnN0eWxlZENvbXBvbmVudElkfSxpJiZ5KEMsZSx7YXR0cnM6ITAsY29tcG9uZW50U3R5bGU6ITAsZGlzcGxheU5hbWU6ITAsZm9sZGVkQ29tcG9uZW50SWRzOiEwLHNob3VsZEZvcndhcmRQcm9wOiEwLHN0eWxlZENvbXBvbmVudElkOiEwLHRhcmdldDohMCx3aXRoQ29tcG9uZW50OiEwfSksQ312YXIgSGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyLG8pe2lmKHZvaWQgMD09PW8mJihvPUUpLCFuKHIpKXJldHVybiBqKDEsU3RyaW5nKHIpKTt2YXIgcz1mdW5jdGlvbigpe3JldHVybiB0KHIsbyxDZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9O3JldHVybiBzLndpdGhDb25maWc9ZnVuY3Rpb24obil7cmV0dXJuIGUodCxyLHYoe30sbyx7fSxuKSl9LHMuYXR0cnM9ZnVuY3Rpb24obil7cmV0dXJuIGUodCxyLHYoe30sbyx7YXR0cnM6QXJyYXkucHJvdG90eXBlLmNvbmNhdChvLmF0dHJzLG4pLmZpbHRlcihCb29sZWFuKX0pKX0sc30ocWUsZSl9O1tcImFcIixcImFiYnJcIixcImFkZHJlc3NcIixcImFyZWFcIixcImFydGljbGVcIixcImFzaWRlXCIsXCJhdWRpb1wiLFwiYlwiLFwiYmFzZVwiLFwiYmRpXCIsXCJiZG9cIixcImJpZ1wiLFwiYmxvY2txdW90ZVwiLFwiYm9keVwiLFwiYnJcIixcImJ1dHRvblwiLFwiY2FudmFzXCIsXCJjYXB0aW9uXCIsXCJjaXRlXCIsXCJjb2RlXCIsXCJjb2xcIixcImNvbGdyb3VwXCIsXCJkYXRhXCIsXCJkYXRhbGlzdFwiLFwiZGRcIixcImRlbFwiLFwiZGV0YWlsc1wiLFwiZGZuXCIsXCJkaWFsb2dcIixcImRpdlwiLFwiZGxcIixcImR0XCIsXCJlbVwiLFwiZW1iZWRcIixcImZpZWxkc2V0XCIsXCJmaWdjYXB0aW9uXCIsXCJmaWd1cmVcIixcImZvb3RlclwiLFwiZm9ybVwiLFwiaDFcIixcImgyXCIsXCJoM1wiLFwiaDRcIixcImg1XCIsXCJoNlwiLFwiaGVhZFwiLFwiaGVhZGVyXCIsXCJoZ3JvdXBcIixcImhyXCIsXCJodG1sXCIsXCJpXCIsXCJpZnJhbWVcIixcImltZ1wiLFwiaW5wdXRcIixcImluc1wiLFwia2JkXCIsXCJrZXlnZW5cIixcImxhYmVsXCIsXCJsZWdlbmRcIixcImxpXCIsXCJsaW5rXCIsXCJtYWluXCIsXCJtYXBcIixcIm1hcmtcIixcIm1hcnF1ZWVcIixcIm1lbnVcIixcIm1lbnVpdGVtXCIsXCJtZXRhXCIsXCJtZXRlclwiLFwibmF2XCIsXCJub3NjcmlwdFwiLFwib2JqZWN0XCIsXCJvbFwiLFwib3B0Z3JvdXBcIixcIm9wdGlvblwiLFwib3V0cHV0XCIsXCJwXCIsXCJwYXJhbVwiLFwicGljdHVyZVwiLFwicHJlXCIsXCJwcm9ncmVzc1wiLFwicVwiLFwicnBcIixcInJ0XCIsXCJydWJ5XCIsXCJzXCIsXCJzYW1wXCIsXCJzY3JpcHRcIixcInNlY3Rpb25cIixcInNlbGVjdFwiLFwic21hbGxcIixcInNvdXJjZVwiLFwic3BhblwiLFwic3Ryb25nXCIsXCJzdHlsZVwiLFwic3ViXCIsXCJzdW1tYXJ5XCIsXCJzdXBcIixcInRhYmxlXCIsXCJ0Ym9keVwiLFwidGRcIixcInRleHRhcmVhXCIsXCJ0Zm9vdFwiLFwidGhcIixcInRoZWFkXCIsXCJ0aW1lXCIsXCJ0aXRsZVwiLFwidHJcIixcInRyYWNrXCIsXCJ1XCIsXCJ1bFwiLFwidmFyXCIsXCJ2aWRlb1wiLFwid2JyXCIsXCJjaXJjbGVcIixcImNsaXBQYXRoXCIsXCJkZWZzXCIsXCJlbGxpcHNlXCIsXCJmb3JlaWduT2JqZWN0XCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwibGluZWFyR3JhZGllbnRcIixcIm1hcmtlclwiLFwibWFza1wiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJhZGlhbEdyYWRpZW50XCIsXCJyZWN0XCIsXCJzdG9wXCIsXCJzdmdcIixcInRleHRcIixcInRleHRQYXRoXCIsXCJ0c3BhblwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtIZVtlXT1IZShlKX0pKTt2YXIgJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5ydWxlcz1lLHRoaXMuY29tcG9uZW50SWQ9dCx0aGlzLmlzU3RhdGljPXJlKGUpLFoucmVnaXN0ZXJJZCh0aGlzLmNvbXBvbmVudElkKzEpfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNyZWF0ZVN0eWxlcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1yKE5lKHRoaXMucnVsZXMsdCxuLHIpLmpvaW4oXCJcIiksXCJcIikscz10aGlzLmNvbXBvbmVudElkK2U7bi5pbnNlcnRSdWxlcyhzLHMsbyl9LHQucmVtb3ZlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dC5jbGVhclJ1bGVzKHRoaXMuY29tcG9uZW50SWQrZSl9LHQucmVuZGVyU3R5bGVzPWZ1bmN0aW9uKGUsdCxuLHIpe2U+MiYmWi5yZWdpc3RlcklkKHRoaXMuY29tcG9uZW50SWQrZSksdGhpcy5yZW1vdmVTdHlsZXMoZSxuKSx0aGlzLmNyZWF0ZVN0eWxlcyhlLHQsbixyKX0sZX0oKTtmdW5jdGlvbiBXZShlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKW5bby0xXT1hcmd1bWVudHNbb107dmFyIGk9Q2UuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLGE9XCJzYy1nbG9iYWwtXCIreGUoSlNPTi5zdHJpbmdpZnkoaSkpLHU9bmV3ICRlKGksYSk7ZnVuY3Rpb24gbChlKXt2YXIgdD1mZSgpLG49bWUoKSxvPXMoR2UpLGw9Yyh0LmFsbG9jYXRlR1NJbnN0YW5jZShhKSkuY3VycmVudDtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZyLkNoaWxkcmVuLmNvdW50KGUuY2hpbGRyZW4pJiZjb25zb2xlLndhcm4oXCJUaGUgZ2xvYmFsIHN0eWxlIGNvbXBvbmVudCBcIithK1wiIHdhcyBnaXZlbiBjaGlsZCBKU1guIGNyZWF0ZUdsb2JhbFN0eWxlIGRvZXMgbm90IHJlbmRlciBjaGlsZHJlbi5cIiksXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmaS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmLTEhPT1lLmluZGV4T2YoXCJAaW1wb3J0XCIpfSkpJiZjb25zb2xlLndhcm4oXCJQbGVhc2UgZG8gbm90IHVzZSBAaW1wb3J0IENTUyBzeW50YXggaW4gY3JlYXRlR2xvYmFsU3R5bGUgYXQgdGhpcyB0aW1lLCBhcyB0aGUgQ1NTT00gQVBJcyB3ZSB1c2UgaW4gcHJvZHVjdGlvbiBkbyBub3QgaGFuZGxlIGl0IHdlbGwuIEluc3RlYWQsIHdlIHJlY29tbWVuZCB1c2luZyBhIGxpYnJhcnkgc3VjaCBhcyByZWFjdC1oZWxtZXQgdG8gaW5qZWN0IGEgdHlwaWNhbCA8bGluaz4gbWV0YSB0YWcgdG8gdGhlIHN0eWxlc2hlZXQsIG9yIHNpbXBseSBlbWJlZGRpbmcgaXQgbWFudWFsbHkgaW4geW91ciBpbmRleC5odG1sIDxoZWFkPiBzZWN0aW9uIGZvciBhIHNpbXBsZXIgYXBwLlwiKSx0LnNlcnZlciYmaChsLGUsdCxvLG4pLGQoKGZ1bmN0aW9uKCl7aWYoIXQuc2VydmVyKXJldHVybiBoKGwsZSx0LG8sbiksZnVuY3Rpb24oKXtyZXR1cm4gdS5yZW1vdmVTdHlsZXMobCx0KX19KSxbbCxlLHQsbyxuXSksbnVsbH1mdW5jdGlvbiBoKGUsdCxuLHIsbyl7aWYodS5pc1N0YXRpYyl1LnJlbmRlclN0eWxlcyhlLE8sbixvKTtlbHNle3ZhciBzPXYoe30sdCx7dGhlbWU6UmUodCxyLGwuZGVmYXVsdFByb3BzKX0pO3UucmVuZGVyU3R5bGVzKGUscyxuLG8pfX1yZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZPZShhKSxyLm1lbW8obCl9ZnVuY3Rpb24gVWUoZSl7XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmXCJSZWFjdE5hdGl2ZVwiPT09bmF2aWdhdG9yLnByb2R1Y3QmJmNvbnNvbGUud2FybihcImBrZXlmcmFtZXNgIGNhbm5vdCBiZSB1c2VkIG9uIFJlYWN0TmF0aXZlLCBvbmx5IG9uIHRoZSB3ZWIuIFRvIGRvIGFuaW1hdGlvbiBpbiBSZWFjdE5hdGl2ZSBwbGVhc2UgdXNlIEFuaW1hdGVkLlwiKTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dmFyIG89Q2UuYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpLmpvaW4oXCJcIikscz14ZShvKTtyZXR1cm4gbmV3IHZlKHMsbyl9dmFyIEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXM7dGhpcy5fZW1pdFNoZWV0Q1NTPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5pbnN0YW5jZS50b1N0cmluZygpO2lmKCF0KXJldHVyblwiXCI7dmFyIG49cSgpO3JldHVyblwiPHN0eWxlIFwiK1tuJiYnbm9uY2U9XCInK24rJ1wiJyxBKyc9XCJ0cnVlXCInLCdkYXRhLXN0eWxlZC12ZXJzaW9uPVwiNS4zLjNcIiddLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKStcIj5cIit0K1wiPC9zdHlsZT5cIn0sdGhpcy5nZXRTdHlsZVRhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZWFsZWQ/aigyKTplLl9lbWl0U2hlZXRDU1MoKX0sdGhpcy5nZXRTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdDtpZihlLnNlYWxlZClyZXR1cm4gaigyKTt2YXIgbj0oKHQ9e30pW0FdPVwiXCIsdFtcImRhdGEtc3R5bGVkLXZlcnNpb25cIl09XCI1LjMuM1wiLHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e19faHRtbDplLmluc3RhbmNlLnRvU3RyaW5nKCl9LHQpLG89cSgpO3JldHVybiBvJiYobi5ub25jZT1vKSxbci5jcmVhdGVFbGVtZW50KFwic3R5bGVcIix2KHt9LG4se2tleTpcInNjLTAtMFwifSkpXX0sdGhpcy5zZWFsPWZ1bmN0aW9uKCl7ZS5zZWFsZWQ9ITB9LHRoaXMuaW5zdGFuY2U9bmV3IFooe2lzU2VydmVyOiEwfSksdGhpcy5zZWFsZWQ9ITF9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZWFsZWQ/aigyKTpyLmNyZWF0ZUVsZW1lbnQoeWUse3NoZWV0OnRoaXMuaW5zdGFuY2V9LGUpfSx0LmludGVybGVhdmVXaXRoTm9kZVN0cmVhbT1mdW5jdGlvbihlKXtyZXR1cm4gaigzKX0sZX0oKSxYZT1mdW5jdGlvbihlKXt2YXIgdD1yLmZvcndhcmRSZWYoKGZ1bmN0aW9uKHQsbil7dmFyIG89cyhHZSksaT1lLmRlZmF1bHRQcm9wcyxhPVJlKHQsbyxpKTtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZ2b2lkIDA9PT1hJiZjb25zb2xlLndhcm4oJ1t3aXRoVGhlbWVdIFlvdSBhcmUgbm90IHVzaW5nIGEgVGhlbWVQcm92aWRlciBub3IgcGFzc2luZyBhIHRoZW1lIHByb3Agb3IgYSB0aGVtZSBpbiBkZWZhdWx0UHJvcHMgaW4gY29tcG9uZW50IGNsYXNzIFwiJytfKGUpKydcIicpLHIuY3JlYXRlRWxlbWVudChlLHYoe30sdCx7dGhlbWU6YSxyZWY6bn0pKX0pKTtyZXR1cm4geSh0LGUpLHQuZGlzcGxheU5hbWU9XCJXaXRoVGhlbWUoXCIrXyhlKStcIilcIix0fSxaZT1mdW5jdGlvbigpe3JldHVybiBzKEdlKX0sS2U9e1N0eWxlU2hlZXQ6WixtYXN0ZXJTaGVldDpoZX07XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmXCJSZWFjdE5hdGl2ZVwiPT09bmF2aWdhdG9yLnByb2R1Y3QmJmNvbnNvbGUud2FybihcIkl0IGxvb2tzIGxpa2UgeW91J3ZlIGltcG9ydGVkICdzdHlsZWQtY29tcG9uZW50cycgb24gUmVhY3QgTmF0aXZlLlxcblBlcmhhcHMgeW91J3JlIGxvb2tpbmcgdG8gaW1wb3J0ICdzdHlsZWQtY29tcG9uZW50cy9uYXRpdmUnP1xcblJlYWQgbW9yZSBhYm91dCB0aGlzIGF0IGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2Jhc2ljcyNyZWFjdC1uYXRpdmVcIiksXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJ0ZXN0XCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvd1tcIl9fc3R5bGVkLWNvbXBvbmVudHMtaW5pdF9fXCJdPXdpbmRvd1tcIl9fc3R5bGVkLWNvbXBvbmVudHMtaW5pdF9fXCJdfHwwLDE9PT13aW5kb3dbXCJfX3N0eWxlZC1jb21wb25lbnRzLWluaXRfX1wiXSYmY29uc29sZS53YXJuKFwiSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgJ3N0eWxlZC1jb21wb25lbnRzJyBpbml0aWFsaXplZCBpbiB0aGlzIGFwcGxpY2F0aW9uLiBUaGlzIG1heSBjYXVzZSBkeW5hbWljIHN0eWxlcyB0byBub3QgcmVuZGVyIHByb3Blcmx5LCBlcnJvcnMgZHVyaW5nIHRoZSByZWh5ZHJhdGlvbiBwcm9jZXNzLCBhIG1pc3NpbmcgdGhlbWUgcHJvcCwgYW5kIG1ha2VzIHlvdXIgYXBwbGljYXRpb24gYmlnZ2VyIHdpdGhvdXQgZ29vZCByZWFzb24uXFxuXFxuU2VlIGh0dHBzOi8vcy1jLnNoLzJCQVh6ZWQgZm9yIG1vcmUgaW5mby5cIiksd2luZG93W1wiX19zdHlsZWQtY29tcG9uZW50cy1pbml0X19cIl0rPTEpO2V4cG9ydCBkZWZhdWx0IEhlO2V4cG9ydHtKZSBhcyBTZXJ2ZXJTdHlsZVNoZWV0LGxlIGFzIFN0eWxlU2hlZXRDb25zdW1lcix1ZSBhcyBTdHlsZVNoZWV0Q29udGV4dCx5ZSBhcyBTdHlsZVNoZWV0TWFuYWdlcixMZSBhcyBUaGVtZUNvbnN1bWVyLEdlIGFzIFRoZW1lQ29udGV4dCxGZSBhcyBUaGVtZVByb3ZpZGVyLEtlIGFzIF9fUFJJVkFURV9fLFdlIGFzIGNyZWF0ZUdsb2JhbFN0eWxlLENlIGFzIGNzcyxOIGFzIGlzU3R5bGVkQ29tcG9uZW50LFVlIGFzIGtleWZyYW1lcyxaZSBhcyB1c2VUaGVtZSxDIGFzIHZlcnNpb24sWGUgYXMgd2l0aFRoZW1lfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlZC1jb21wb25lbnRzLmJyb3dzZXIuZXNtLmpzLm1hcFxuIl0sIm5hbWVzIjpbInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImRlZmF1bHRQcm9wcyIsImRpc3BsYXlOYW1lIiwiZ2V0RGVmYXVsdFByb3BzIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibWl4aW5zIiwicHJvcFR5cGVzIiwidHlwZSIsIktOT1dOX1NUQVRJQ1MiLCJuYW1lIiwibGVuZ3RoIiwicHJvdG90eXBlIiwiY2FsbGVyIiwiY2FsbGVlIiwiYXJndW1lbnRzIiwiYXJpdHkiLCJNRU1PX1NUQVRJQ1MiLCJjb21wYXJlIiwiVFlQRV9TVEFUSUNTIiwiZ2V0U3RhdGljcyIsImNvbXBvbmVudCIsImlzTWVtbyIsIkZvcndhcmRSZWYiLCJyZW5kZXIiLCJNZW1vIiwiZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJvYmplY3RQcm90b3R5cGUiLCJtb2R1bGUiLCJleHBvcnRzIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJ0YXJnZXRDb21wb25lbnQiLCJzb3VyY2VDb21wb25lbnQiLCJibGFja2xpc3QiLCJpbmhlcml0ZWRDb21wb25lbnQiLCJrZXlzIiwiY29uY2F0IiwidGFyZ2V0U3RhdGljcyIsInNvdXJjZVN0YXRpY3MiLCJpIiwia2V5IiwiZGVzY3JpcHRvciIsImUiLCJiIiwiU3ltYm9sIiwiZm9yIiwiYyIsImQiLCJmIiwiZyIsImgiLCJrIiwibCIsIm0iLCJuIiwicCIsInEiLCJyIiwidCIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYSIsInUiLCIkJHR5cGVvZiIsIkEiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGcmFnbWVudCIsIkxhenkiLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSIsImlzVmFsaWRFbGVtZW50VHlwZSIsInR5cGVPZiIsIm9iakEiLCJvYmpCIiwiY29tcGFyZUNvbnRleHQiLCJyZXQiLCJjYWxsIiwia2V5c0EiLCJrZXlzQiIsImJIYXNPd25Qcm9wZXJ0eSIsImhhc093blByb3BlcnR5IiwiYmluZCIsImlkeCIsInZhbHVlQSIsInZhbHVlQiIsIlciLCJNIiwiQyIsIksiLCJJIiwiQiIsIkoiLCJGIiwiRyIsImNoYXJDb2RlQXQiLCJyZXBsYWNlIiwiTiIsInRyaW0iLCJjaGFyQXQiLCJzdWJzdHJpbmciLCJjYSIsIk8iLCJIIiwiWCIsIkQiLCJqb2luIiwiZGEiLCJlYSIsImZhIiwiTCIsIlAiLCJZIiwiRSIsImhhIiwiUSIsInNwbGl0IiwiaWEiLCJaIiwiaW5kZXhPZiIsImphIiwia2EiLCJ0ZXN0IiwiYWEiLCJiYSIsImxhIiwibWEiLCJSIiwibmEiLCJvYSIsIlMiLCJVIiwicHJlZml4IiwidXNlIiwiVCIsInNldCIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiYm9yZGVySW1hZ2VPdXRzZXQiLCJib3JkZXJJbWFnZVNsaWNlIiwiYm9yZGVySW1hZ2VXaWR0aCIsImJveEZsZXgiLCJib3hGbGV4R3JvdXAiLCJib3hPcmRpbmFsR3JvdXAiLCJjb2x1bW5Db3VudCIsImNvbHVtbnMiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJncmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJtc0dyaWRSb3ciLCJtc0dyaWRSb3dTcGFuIiwibXNHcmlkQ29sdW1uIiwibXNHcmlkQ29sdW1uU3BhbiIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsInRhYlNpemUiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiV2Via2l0TGluZUNsYW1wIiwiZmlsbE9wYWNpdHkiLCJmbG9vZE9wYWNpdHkiLCJzdG9wT3BhY2l0eSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlT3BhY2l0eSIsInN0cm9rZVdpZHRoIiwicmVhY3RQcm9wc1JlZ2V4IiwiY2FjaGUiLCJhcmciLCJ1bmRlZmluZWQiLCJwcm9wIiwiYXNzaWduIiwiYXBwbHkiLCJ0aGlzIiwibyIsInB1c2giLCJ0b1N0cmluZyIsImZyZWV6ZSIsIl8iLCJzdHlsZWRDb21wb25lbnRJZCIsIlJFQUNUX0FQUF9TQ19BVFRSIiwiU0NfQVRUUiIsIndpbmRvdyIsIkJvb2xlYW4iLCJTQ19ESVNBQkxFX1NQRUVEWSIsIlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWSIsImoiLCJBcnJheSIsIkVycm9yIiwiZ3JvdXBTaXplcyIsIlVpbnQzMkFycmF5IiwidGFnIiwiaW5kZXhPZkdyb3VwIiwiaW5zZXJ0UnVsZXMiLCJzIiwiaW5zZXJ0UnVsZSIsImNsZWFyR3JvdXAiLCJkZWxldGVSdWxlIiwiZ2V0R3JvdXAiLCJnZXRSdWxlIiwiTWFwIiwiViIsImhhcyIsImdldCIsIlJlZ0V4cCIsInJlZ2lzdGVyTmFtZSIsInRleHRDb250ZW50IiwibWF0Y2giLCJwYXJzZUludCIsImdldFRhZyIsIl9fd2VicGFja19ub25jZV9fIiwiZG9jdW1lbnQiLCJoZWFkIiwiY3JlYXRlRWxlbWVudCIsImNoaWxkTm9kZXMiLCJub2RlVHlwZSIsImhhc0F0dHJpYnV0ZSIsIm5leHRTaWJsaW5nIiwic2V0QXR0cmlidXRlIiwiaW5zZXJ0QmVmb3JlIiwiJCIsImVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwic2hlZXQiLCJzdHlsZVNoZWV0cyIsIm93bmVyTm9kZSIsImNzc1J1bGVzIiwiY3NzVGV4dCIsIm5vZGVzIiwicmVtb3ZlQ2hpbGQiLCJydWxlcyIsInNwbGljZSIsImlzU2VydmVyIiwidXNlQ1NTT01JbmplY3Rpb24iLCJvcHRpb25zIiwiZ3MiLCJuYW1lcyIsInNlcnZlciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwicmVnaXN0ZXJJZCIsInJlY29uc3RydWN0V2l0aE9wdGlvbnMiLCJhbGxvY2F0ZUdTSW5zdGFuY2UiLCJ0YXJnZXQiLCJoYXNOYW1lRm9ySWQiLCJhZGQiLCJTZXQiLCJjbGVhck5hbWVzIiwiY2xlYXIiLCJjbGVhclJ1bGVzIiwiY2xlYXJUYWciLCJzaXplIiwiZm9yRWFjaCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImVlIiwiTWF0aCIsImFicyIsInRlIiwibmUiLCJyZSIsIm9lIiwic2UiLCJzdGF0aWNSdWxlc0lkIiwiaXNTdGF0aWMiLCJjb21wb25lbnRJZCIsImJhc2VIYXNoIiwiYmFzZVN0eWxlIiwiZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMiLCJoYXNoIiwiTmUiLCJpc0FycmF5IiwiaWUiLCJhZSIsImNlIiwicGx1Z2lucyIsImxhc3RJbmRleE9mIiwicmVkdWNlIiwidWUiLCJsZSIsIkNvbnN1bWVyIiwiZGUiLCJoZSIsInBlIiwiZmUiLCJtZSIsInllIiwic3R5bGlzUGx1Z2lucyIsImRpc2FibGVDU1NPTUluamVjdGlvbiIsImRpc2FibGVWZW5kb3JQcmVmaXhlcyIsIlByb3ZpZGVyIiwidmFsdWUiLCJjaGlsZHJlbiIsInZlIiwiaW5qZWN0IiwiaWQiLCJnZXROYW1lIiwiZ2UiLCJTZSIsIndlIiwiRWUiLCJ0b0xvd2VyQ2FzZSIsImJlIiwiX2UiLCJpc1JlYWN0Q29tcG9uZW50IiwiaXNDc3MiLCJBZSIsIkNlIiwiUmUiLCJ0aGVtZSIsIkRlIiwiamUiLCJUZSIsInhlIiwia2UiLCJWZSIsIkJlIiwiemUiLCJNZSIsIkdlIiwiTGUiLCJGZSIsIlllIiwicWUiLCJhdHRycyIsInBhcmVudENvbXBvbmVudElkIiwiZmlsdGVyIiwic2hvdWxkRm9yd2FyZFByb3AiLCJjb21wb25lbnRTdHlsZSIsImZvbGRlZENvbXBvbmVudElkcyIsIiRhcyIsImFzIiwic3R5bGUiLCJjbGFzc05hbWUiLCJyZWYiLCJ3aXRoQ29tcG9uZW50IiwiX2ZvbGRlZERlZmF1bHRQcm9wcyIsIkhlIiwid2l0aENvbmZpZyIsIiRlIiwiY3JlYXRlU3R5bGVzIiwicmVtb3ZlU3R5bGVzIiwicmVuZGVyU3R5bGVzIiwiV2UiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VycmVudCIsIlVlIiwiSmUiLCJfZW1pdFNoZWV0Q1NTIiwiaW5zdGFuY2UiLCJnZXRTdHlsZVRhZ3MiLCJzZWFsZWQiLCJnZXRTdHlsZUVsZW1lbnQiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIm5vbmNlIiwic2VhbCIsImNvbGxlY3RTdHlsZXMiLCJpbnRlcmxlYXZlV2l0aE5vZGVTdHJlYW0iLCJYZSIsIlplIiwiS2UiLCJTdHlsZVNoZWV0IiwibWFzdGVyU2hlZXQiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/524.js.LICENSE.txt b/server-data/resources/[phone]/npwd_crypto/web/dist/524.js.LICENSE.txt deleted file mode 100644 index 6f6f2bb3f..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/524.js.LICENSE.txt +++ /dev/null @@ -1,8 +0,0 @@ -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/563.js b/server-data/resources/[phone]/npwd_crypto/web/dist/563.js deleted file mode 100644 index 16f953d4b..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/563.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[563,376],{5376:(e,t,n)=>{n.r(t),n.d(t,{Bar:()=>v,Bubble:()=>A,Chart:()=>p,Doughnut:()=>m,Line:()=>h,Pie:()=>y,PolarArea:()=>w,Radar:()=>C,Scatter:()=>R,getDatasetAtEvent:()=>d,getElementAtEvent:()=>f,getElementsAtEvent:()=>g});var r=n(2950),a=n.n(r),s=n(7e3);const o="label";function u(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function l(e,t){e.labels=t}function c(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o;const r=[];e.datasets=t.map((t=>{const a=e.datasets.find((e=>e[n]===t[n]));return a&&t.data&&!r.includes(a)?(r.push(a),Object.assign(a,t),a):{...t}}))}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;const n={labels:[],datasets:[]};return l(n,e.labels),c(n,e.datasets,t),n}function d(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"dataset",{intersect:!0},!1)}function f(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"nearest",{intersect:!0},!1)}function g(e,t){return e.getElementsAtEventForMode(t.nativeEvent,"index",{intersect:!0},!1)}function b(e,t){let{height:n=150,width:o=300,redraw:d=!1,datasetIdKey:f,type:g,data:b,options:p,plugins:E=[],fallbackContent:h,updateMode:v,...C}=e;const m=(0,r.useRef)(null),w=(0,r.useRef)(),A=()=>{m.current&&(w.current=new s.Chart(m.current,{type:g,data:i(b,f),options:p&&{...p},plugins:E}),u(t,w.current))},y=()=>{u(t,null),w.current&&(w.current.destroy(),w.current=null)};return(0,r.useEffect)((()=>{var e,t;!d&&w.current&&p&&(e=w.current,t=p,Object.assign(e.options,t))}),[d,p]),(0,r.useEffect)((()=>{!d&&w.current&&l(w.current.config.data,b.labels)}),[d,b.labels]),(0,r.useEffect)((()=>{!d&&w.current&&b.datasets&&c(w.current.config.data,b.datasets,f)}),[d,b.datasets]),(0,r.useEffect)((()=>{w.current&&(d?(y(),setTimeout(A)):w.current.update(v))}),[d,p,b.labels,b.datasets,v]),(0,r.useEffect)((()=>{w.current&&(y(),setTimeout(A))}),[g]),(0,r.useEffect)((()=>(A(),()=>y())),[]),a().createElement("canvas",Object.assign({ref:m,role:"img",height:n,width:o},C),h)}const p=(0,r.forwardRef)(b);function E(e,t){return s.Chart.register(t),(0,r.forwardRef)(((t,n)=>a().createElement(p,Object.assign({},t,{ref:n,type:e}))))}const h=E("line",s.LineController),v=E("bar",s.BarController),C=E("radar",s.RadarController),m=E("doughnut",s.DoughnutController),w=E("polarArea",s.PolarAreaController),A=E("bubble",s.BubbleController),y=E("pie",s.PieController),R=E("scatter",s.ScatterController)}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bkIsRUFBS04sWUFFVCxJQUFBdUMsWUFBVSxLQUNETCxFQUFTN0MsVUFDVm9DLEdBQ0FZLElBQ0FLLFdBQVdQLElBRVhELEVBQVM3QyxRQUFRc0QsT0FBT2IsTUFFN0IsQ0FDQ0wsRUFDQUUsRUFDQXJCLEVBQUtiLE9BQ0xhLEVBQUtOLFNBQ0w4QixLQUVKLElBQUFTLFlBQVUsS0FDREwsRUFBUzdDLFVBQ2RnRCxJQUNBSyxXQUFXUCxNQUNaLENBQ0NULEtBRUosSUFBQWEsWUFBVSxLQUNOSixJQUNPLElBQUlFLE1BRVosSUFDa0Isa0JBQW9CLFNBQVU1QixPQUFPQyxPQUFPLENBQzdEdkIsSUFBSzZDLEVBQ0xZLEtBQU0sTUFDTnJCLE9BQVFBLEVBQ1JDLE1BQU9BLEdBQ1JPLEdBQVFGLEdBRWYsTUFBTU8sR0FBc0IsSUFBQVMsWUFBV3hCLEdBRXZDLFNBQVN5QixFQUFpQnBCLEVBQU1xQixHQUU1QixPQURBLEVBQUFYLE1BQUEsU0FBaUJXLElBQ0ksSUFBQUYsYUFBVyxDQUFDZCxFQUFPNUMsSUFBb0Isa0JBQW9CaUQsRUFBTzNCLE9BQU9DLE9BQU8sR0FBSXFCLEVBQU8sQ0FDeEc1QyxJQUFLQSxFQUNMdUMsS0FBTUEsT0FJbEIsTUFBTXNCLEVBQXVCRixFQUFpQixPQUFRLEVBQUFHLGdCQUNoREMsRUFBc0JKLEVBQWlCLE1BQU8sRUFBQUssZUFDOUNDLEVBQXdCTixFQUFpQixRQUFTLEVBQUFPLGlCQUNsREMsRUFBMkJSLEVBQWlCLFdBQVksRUFBQVMsb0JBQ3hEQyxFQUE0QlYsRUFBaUIsWUFBYSxFQUFBVyxxQkFDMURDLEVBQXlCWixFQUFpQixTQUFVLEVBQUFhLGtCQUNwREMsRUFBc0JkLEVBQWlCLE1BQU8sRUFBQWUsZUFDOUNDLEVBQTBCaEIsRUFBaUIsVUFBVyxFQUFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1jaGFydGpzLTIvZGlzdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGFydCBhcyBDaGFydCQxLCBMaW5lQ29udHJvbGxlciwgQmFyQ29udHJvbGxlciwgUmFkYXJDb250cm9sbGVyLCBEb3VnaG51dENvbnRyb2xsZXIsIFBvbGFyQXJlYUNvbnRyb2xsZXIsIEJ1YmJsZUNvbnRyb2xsZXIsIFBpZUNvbnRyb2xsZXIsIFNjYXR0ZXJDb250cm9sbGVyIH0gZnJvbSAnY2hhcnQuanMnO1xuXG5jb25zdCBkZWZhdWx0RGF0YXNldElkS2V5ID0gJ2xhYmVsJztcbmZ1bmN0aW9uIHJlZm9yd2FyZFJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldE9wdGlvbnMoY2hhcnQsIG5leHRPcHRpb25zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGFydC5vcHRpb25zLCBuZXh0T3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzZXRMYWJlbHMoY3VycmVudERhdGEsIG5leHRMYWJlbHMpIHtcbiAgICBjdXJyZW50RGF0YS5sYWJlbHMgPSBuZXh0TGFiZWxzO1xufVxuZnVuY3Rpb24gc2V0RGF0YXNldHMoY3VycmVudERhdGEsIG5leHREYXRhc2V0cykge1xuICAgIGxldCBkYXRhc2V0SWRLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IGRlZmF1bHREYXRhc2V0SWRLZXk7XG4gICAgY29uc3QgYWRkZWREYXRhc2V0cyA9IFtdO1xuICAgIGN1cnJlbnREYXRhLmRhdGFzZXRzID0gbmV4dERhdGFzZXRzLm1hcCgobmV4dERhdGFzZXQpPT57XG4gICAgICAgIC8vIGdpdmVuIHRoZSBuZXcgc2V0LCBmaW5kIGl0J3MgY3VycmVudCBtYXRjaFxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YXNldCA9IGN1cnJlbnREYXRhLmRhdGFzZXRzLmZpbmQoKGRhdGFzZXQpPT5kYXRhc2V0W2RhdGFzZXRJZEtleV0gPT09IG5leHREYXRhc2V0W2RhdGFzZXRJZEtleV1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gb3JpZ2luYWwgdG8gdXBkYXRlLCBzbyBzaW1wbHkgYWRkIG5ldyBvbmVcbiAgICAgICAgaWYgKCFjdXJyZW50RGF0YXNldCB8fCAhbmV4dERhdGFzZXQuZGF0YSB8fCBhZGRlZERhdGFzZXRzLmluY2x1ZGVzKGN1cnJlbnREYXRhc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5uZXh0RGF0YXNldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhZGRlZERhdGFzZXRzLnB1c2goY3VycmVudERhdGFzZXQpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnREYXRhc2V0LCBuZXh0RGF0YXNldCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGF0YXNldDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNsb25lRGF0YShkYXRhKSB7XG4gICAgbGV0IGRhdGFzZXRJZEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZGVmYXVsdERhdGFzZXRJZEtleTtcbiAgICBjb25zdCBuZXh0RGF0YSA9IHtcbiAgICAgICAgbGFiZWxzOiBbXSxcbiAgICAgICAgZGF0YXNldHM6IFtdXG4gICAgfTtcbiAgICBzZXRMYWJlbHMobmV4dERhdGEsIGRhdGEubGFiZWxzKTtcbiAgICBzZXREYXRhc2V0cyhuZXh0RGF0YSwgZGF0YS5kYXRhc2V0cywgZGF0YXNldElkS2V5KTtcbiAgICByZXR1cm4gbmV4dERhdGE7XG59XG4vKipcbiAqIEdldCBkYXRhc2V0IGZyb20gbW91c2UgY2xpY2sgZXZlbnRcbiAqIEBwYXJhbSBjaGFydCAtIENoYXJ0LmpzIGluc3RhbmNlXG4gKiBAcGFyYW0gZXZlbnQgLSBNb3VzZSBjbGljayBldmVudFxuICogQHJldHVybnMgRGF0YXNldFxuICovIGZ1bmN0aW9uIGdldERhdGFzZXRBdEV2ZW50KGNoYXJ0LCBldmVudCkge1xuICAgIHJldHVybiBjaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGV2ZW50Lm5hdGl2ZUV2ZW50LCAnZGF0YXNldCcsIHtcbiAgICAgICAgaW50ZXJzZWN0OiB0cnVlXG4gICAgfSwgZmFsc2UpO1xufVxuLyoqXG4gKiBHZXQgc2luZ2xlIGRhdGFzZXQgZWxlbWVudCBmcm9tIG1vdXNlIGNsaWNrIGV2ZW50XG4gKiBAcGFyYW0gY2hhcnQgLSBDaGFydC5qcyBpbnN0YW5jZVxuICogQHBhcmFtIGV2ZW50IC0gTW91c2UgY2xpY2sgZXZlbnRcbiAqIEByZXR1cm5zIERhdGFzZXRcbiAqLyBmdW5jdGlvbiBnZXRFbGVtZW50QXRFdmVudChjaGFydCwgZXZlbnQpIHtcbiAgICByZXR1cm4gY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShldmVudC5uYXRpdmVFdmVudCwgJ25lYXJlc3QnLCB7XG4gICAgICAgIGludGVyc2VjdDogdHJ1ZVxuICAgIH0sIGZhbHNlKTtcbn1cbi8qKlxuICogR2V0IGFsbCBkYXRhc2V0IGVsZW1lbnRzIGZyb20gbW91c2UgY2xpY2sgZXZlbnRcbiAqIEBwYXJhbSBjaGFydCAtIENoYXJ0LmpzIGluc3RhbmNlXG4gKiBAcGFyYW0gZXZlbnQgLSBNb3VzZSBjbGljayBldmVudFxuICogQHJldHVybnMgRGF0YXNldFxuICovIGZ1bmN0aW9uIGdldEVsZW1lbnRzQXRFdmVudChjaGFydCwgZXZlbnQpIHtcbiAgICByZXR1cm4gY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShldmVudC5uYXRpdmVFdmVudCwgJ2luZGV4Jywge1xuICAgICAgICBpbnRlcnNlY3Q6IHRydWVcbiAgICB9LCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIENoYXJ0Q29tcG9uZW50KHBhcmFtLCByZWYpIHtcbiAgICBsZXQgeyBoZWlnaHQgPTE1MCAsIHdpZHRoID0zMDAgLCByZWRyYXcgPWZhbHNlICwgZGF0YXNldElkS2V5ICwgdHlwZSAsIGRhdGEgLCBvcHRpb25zICwgcGx1Z2lucyA9W10gLCBmYWxsYmFja0NvbnRlbnQgLCB1cGRhdGVNb2RlICwgLi4ucHJvcHMgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNhbnZhc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjaGFydFJlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHJlbmRlckNoYXJ0ID0gKCk9PntcbiAgICAgICAgaWYgKCFjYW52YXNSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBjaGFydFJlZi5jdXJyZW50ID0gbmV3IENoYXJ0JDEoY2FudmFzUmVmLmN1cnJlbnQsIHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBkYXRhOiBjbG9uZURhdGEoZGF0YSwgZGF0YXNldElkS2V5KSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgJiYge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zXG4gICAgICAgIH0pO1xuICAgICAgICByZWZvcndhcmRSZWYocmVmLCBjaGFydFJlZi5jdXJyZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3lDaGFydCA9ICgpPT57XG4gICAgICAgIHJlZm9yd2FyZFJlZihyZWYsIG51bGwpO1xuICAgICAgICBpZiAoY2hhcnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2hhcnRSZWYuY3VycmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICBjaGFydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmICghcmVkcmF3ICYmIGNoYXJ0UmVmLmN1cnJlbnQgJiYgb3B0aW9ucykge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhjaGFydFJlZi5jdXJyZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgcmVkcmF3LFxuICAgICAgICBvcHRpb25zXG4gICAgXSk7XG4gICAgdXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmICghcmVkcmF3ICYmIGNoYXJ0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHNldExhYmVscyhjaGFydFJlZi5jdXJyZW50LmNvbmZpZy5kYXRhLCBkYXRhLmxhYmVscyk7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIHJlZHJhdyxcbiAgICAgICAgZGF0YS5sYWJlbHNcbiAgICBdKTtcbiAgICB1c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFyZWRyYXcgJiYgY2hhcnRSZWYuY3VycmVudCAmJiBkYXRhLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBzZXREYXRhc2V0cyhjaGFydFJlZi5jdXJyZW50LmNvbmZpZy5kYXRhLCBkYXRhLmRhdGFzZXRzLCBkYXRhc2V0SWRLZXkpO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICByZWRyYXcsXG4gICAgICAgIGRhdGEuZGF0YXNldHNcbiAgICBdKTtcbiAgICB1c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFjaGFydFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgIGlmIChyZWRyYXcpIHtcbiAgICAgICAgICAgIGRlc3Ryb3lDaGFydCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChyZW5kZXJDaGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFydFJlZi5jdXJyZW50LnVwZGF0ZSh1cGRhdGVNb2RlKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgcmVkcmF3LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBkYXRhLmxhYmVscyxcbiAgICAgICAgZGF0YS5kYXRhc2V0cyxcbiAgICAgICAgdXBkYXRlTW9kZVxuICAgIF0pO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoIWNoYXJ0UmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgZGVzdHJveUNoYXJ0KCk7XG4gICAgICAgIHNldFRpbWVvdXQocmVuZGVyQ2hhcnQpO1xuICAgIH0sIFtcbiAgICAgICAgdHlwZVxuICAgIF0pO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICByZW5kZXJDaGFydCgpO1xuICAgICAgICByZXR1cm4gKCk9PmRlc3Ryb3lDaGFydCgpXG4gICAgICAgIDtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuKC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgcmVmOiBjYW52YXNSZWYsXG4gICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICB9LCBwcm9wcyksIGZhbGxiYWNrQ29udGVudCkpO1xufVxuY29uc3QgQ2hhcnQgPSAvKiNfX1BVUkVfXyovIGZvcndhcmRSZWYoQ2hhcnRDb21wb25lbnQpO1xuXG5mdW5jdGlvbiBjcmVhdGVUeXBlZENoYXJ0KHR5cGUsIHJlZ2lzdGVyYWJsZXMpIHtcbiAgICBDaGFydCQxLnJlZ2lzdGVyKHJlZ2lzdGVyYWJsZXMpO1xuICAgIHJldHVybigvKiNfX1BVUkVfXyovIGZvcndhcmRSZWYoKHByb3BzLCByZWYpPT4vKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hhcnQsIE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfSkpXG4gICAgKSk7XG59XG5jb25zdCBMaW5lID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVR5cGVkQ2hhcnQoJ2xpbmUnLCBMaW5lQ29udHJvbGxlcik7XG5jb25zdCBCYXIgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgnYmFyJywgQmFyQ29udHJvbGxlcik7XG5jb25zdCBSYWRhciA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVUeXBlZENoYXJ0KCdyYWRhcicsIFJhZGFyQ29udHJvbGxlcik7XG5jb25zdCBEb3VnaG51dCA9IC8qICNfX1BVUkVfXyAqLyBjcmVhdGVUeXBlZENoYXJ0KCdkb3VnaG51dCcsIERvdWdobnV0Q29udHJvbGxlcik7XG5jb25zdCBQb2xhckFyZWEgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgncG9sYXJBcmVhJywgUG9sYXJBcmVhQ29udHJvbGxlcik7XG5jb25zdCBCdWJibGUgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgnYnViYmxlJywgQnViYmxlQ29udHJvbGxlcik7XG5jb25zdCBQaWUgPSAvKiAjX19QVVJFX18gKi8gY3JlYXRlVHlwZWRDaGFydCgncGllJywgUGllQ29udHJvbGxlcik7XG5jb25zdCBTY2F0dGVyID0gLyogI19fUFVSRV9fICovIGNyZWF0ZVR5cGVkQ2hhcnQoJ3NjYXR0ZXInLCBTY2F0dGVyQ29udHJvbGxlcik7XG5cbmV4cG9ydCB7IEJhciwgQnViYmxlLCBDaGFydCwgRG91Z2hudXQsIExpbmUsIFBpZSwgUG9sYXJBcmVhLCBSYWRhciwgU2NhdHRlciwgZ2V0RGF0YXNldEF0RXZlbnQsIGdldEVsZW1lbnRBdEV2ZW50LCBnZXRFbGVtZW50c0F0RXZlbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIl0sIm5hbWVzIjpbImRlZmF1bHREYXRhc2V0SWRLZXkiLCJyZWZvcndhcmRSZWYiLCJyZWYiLCJ2YWx1ZSIsImN1cnJlbnQiLCJzZXRMYWJlbHMiLCJjdXJyZW50RGF0YSIsIm5leHRMYWJlbHMiLCJsYWJlbHMiLCJzZXREYXRhc2V0cyIsIm5leHREYXRhc2V0cyIsImRhdGFzZXRJZEtleSIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFkZGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIm1hcCIsIm5leHREYXRhc2V0IiwiY3VycmVudERhdGFzZXQiLCJmaW5kIiwiZGF0YXNldCIsImRhdGEiLCJpbmNsdWRlcyIsInB1c2giLCJPYmplY3QiLCJhc3NpZ24iLCJjbG9uZURhdGEiLCJuZXh0RGF0YSIsImdldERhdGFzZXRBdEV2ZW50IiwiY2hhcnQiLCJldmVudCIsImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCJuYXRpdmVFdmVudCIsImludGVyc2VjdCIsImdldEVsZW1lbnRBdEV2ZW50IiwiZ2V0RWxlbWVudHNBdEV2ZW50IiwiQ2hhcnRDb21wb25lbnQiLCJwYXJhbSIsImhlaWdodCIsIndpZHRoIiwicmVkcmF3IiwidHlwZSIsIm9wdGlvbnMiLCJwbHVnaW5zIiwiZmFsbGJhY2tDb250ZW50IiwidXBkYXRlTW9kZSIsInByb3BzIiwiY2FudmFzUmVmIiwidXNlUmVmIiwiY2hhcnRSZWYiLCJyZW5kZXJDaGFydCIsIkNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiZGVzdHJveSIsInVzZUVmZmVjdCIsIm5leHRPcHRpb25zIiwiY29uZmlnIiwic2V0VGltZW91dCIsInVwZGF0ZSIsInJvbGUiLCJmb3J3YXJkUmVmIiwiY3JlYXRlVHlwZWRDaGFydCIsInJlZ2lzdGVyYWJsZXMiLCJMaW5lIiwiTGluZUNvbnRyb2xsZXIiLCJCYXIiLCJCYXJDb250cm9sbGVyIiwiUmFkYXIiLCJSYWRhckNvbnRyb2xsZXIiLCJEb3VnaG51dCIsIkRvdWdobnV0Q29udHJvbGxlciIsIlBvbGFyQXJlYSIsIlBvbGFyQXJlYUNvbnRyb2xsZXIiLCJCdWJibGUiLCJCdWJibGVDb250cm9sbGVyIiwiUGllIiwiUGllQ29udHJvbGxlciIsIlNjYXR0ZXIiLCJTY2F0dGVyQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/576.js b/server-data/resources/[phone]/npwd_crypto/web/dist/576.js deleted file mode 100644 index e2bdae978..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/576.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 576.js.LICENSE.txt */ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[576],{8679:(e,t,r)=>{var o=r(9864),n={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},c={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},f={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},a={};function p(e){return o.isMemo(e)?f:a[e.$$typeof]||n}a[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},a[o.Memo]=f;var s=Object.defineProperty,y=Object.getOwnPropertyNames,i=Object.getOwnPropertySymbols,u=Object.getOwnPropertyDescriptor,l=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,r,o){if("string"!=typeof r){if(m){var n=l(r);n&&n!==m&&e(t,n,o)}var f=y(r);i&&(f=f.concat(i(r)));for(var a=p(t),b=p(r),d=0;d{var r="function"==typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,n=r?Symbol.for("react.portal"):60106,c=r?Symbol.for("react.fragment"):60107,f=r?Symbol.for("react.strict_mode"):60108,a=r?Symbol.for("react.profiler"):60114,p=r?Symbol.for("react.provider"):60109,s=r?Symbol.for("react.context"):60110,y=r?Symbol.for("react.async_mode"):60111,i=r?Symbol.for("react.concurrent_mode"):60111,u=r?Symbol.for("react.forward_ref"):60112,l=r?Symbol.for("react.suspense"):60113,m=r?Symbol.for("react.suspense_list"):60120,b=r?Symbol.for("react.memo"):60115,d=r?Symbol.for("react.lazy"):60116,$=r?Symbol.for("react.block"):60121,S=r?Symbol.for("react.fundamental"):60117,O=r?Symbol.for("react.responder"):60118,g=r?Symbol.for("react.scope"):60119;function v(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case y:case i:case c:case a:case f:case l:return e;default:switch(e=e&&e.$$typeof){case s:case u:case d:case b:case p:return e;default:return t}}case n:return t}}}function P(e){return v(e)===i}t.AsyncMode=y,t.ConcurrentMode=i,t.ContextConsumer=s,t.ContextProvider=p,t.Element=o,t.ForwardRef=u,t.Fragment=c,t.Lazy=d,t.Memo=b,t.Portal=n,t.Profiler=a,t.StrictMode=f,t.Suspense=l,t.isAsyncMode=function(e){return P(e)||v(e)===y},t.isConcurrentMode=P,t.isContextConsumer=function(e){return v(e)===s},t.isContextProvider=function(e){return v(e)===p},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},t.isForwardRef=function(e){return v(e)===u},t.isFragment=function(e){return v(e)===c},t.isLazy=function(e){return v(e)===d},t.isMemo=function(e){return v(e)===b},t.isPortal=function(e){return v(e)===n},t.isProfiler=function(e){return v(e)===a},t.isStrictMode=function(e){return v(e)===f},t.isSuspense=function(e){return v(e)===l},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===c||e===i||e===a||e===f||e===l||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===d||e.$$typeof===b||e.$$typeof===p||e.$$typeof===s||e.$$typeof===u||e.$$typeof===S||e.$$typeof===O||e.$$typeof===g||e.$$typeof===$)},t.typeOf=v},9864:(e,t,r)=>{e.exports=r(9921)},7462:(e,t,r)=>{function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;to})},4578:(e,t,r)=>{r.d(t,{Z:()=>n});var o=r(9611);function n(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,o.Z)(e,t)}},3366:(e,t,r)=>{function o(e,t){if(null==e)return{};var r,o,n={},c=Object.keys(e);for(o=0;o=0||(n[r]=e[r]);return n}r.d(t,{Z:()=>o})},9611:(e,t,r)=>{function o(e,t){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},o(e,t)}r.d(t,{Z:()=>o})}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y3RCLE9BYkFBLEVBQVd2RSxPQUFPd0UsT0FBU3hFLE9BQU93RSxPQUFPQyxPQUFTLFNBQVVDLEdBQzFELElBQUssSUFBSXpELEVBQUksRUFBR0EsRUFBSTdCLFVBQVVKLE9BQVFpQyxJQUFLLENBQ3pDLElBQUkwRCxFQUFTdkYsVUFBVTZCLEdBRXZCLElBQUssSUFBSUMsS0FBT3lELEVBQ1YzRSxPQUFPZixVQUFVMkYsZUFBZUMsS0FBS0YsRUFBUXpELEtBQy9Dd0QsRUFBT3hELEdBQU95RCxFQUFPekQsSUFLM0IsT0FBT3dELEdBRUZILEVBQVNPLE1BQU1DLEtBQU0zRiwyRUNiZixTQUFTNEYsRUFBZUMsRUFBVUMsR0FDL0NELEVBQVNoRyxVQUFZZSxPQUFPbUYsT0FBT0QsRUFBV2pHLFdBQzlDZ0csRUFBU2hHLFVBQVVtRyxZQUFjSCxHQUNqQyxPQUFlQSxFQUFVQyxvQkNKWixTQUFTRyxFQUE4QlYsRUFBUVcsR0FDNUQsR0FBYyxNQUFWWCxFQUFnQixNQUFPLEdBQzNCLElBRUl6RCxFQUFLRCxFQUZMeUQsRUFBUyxHQUNUYSxFQUFhdkYsT0FBT2EsS0FBSzhELEdBRzdCLElBQUsxRCxFQUFJLEVBQUdBLEVBQUlzRSxFQUFXdkcsT0FBUWlDLElBQ2pDQyxFQUFNcUUsRUFBV3RFLEdBQ2JxRSxFQUFTRSxRQUFRdEUsSUFBUSxJQUM3QndELEVBQU94RCxHQUFPeUQsRUFBT3pELElBR3ZCLE9BQU93RCxtQ0NaTSxTQUFTZSxFQUFnQkMsRUFBR3pELEdBS3pDLE9BSkF3RCxFQUFrQnpGLE9BQU8yRixlQUFpQjNGLE9BQU8yRixlQUFlbEIsT0FBUyxTQUF5QmlCLEVBQUd6RCxHQUVuRyxPQURBeUQsRUFBRUUsVUFBWTNELEVBQ1B5RCxHQUVGRCxFQUFnQkMsRUFBR3pEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSJdLCJuYW1lcyI6WyJyZWFjdElzIiwiUkVBQ1RfU1RBVElDUyIsImNoaWxkQ29udGV4dFR5cGVzIiwiY29udGV4dFR5cGUiLCJjb250ZXh0VHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJkaXNwbGF5TmFtZSIsImdldERlZmF1bHRQcm9wcyIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm1peGlucyIsInByb3BUeXBlcyIsInR5cGUiLCJLTk9XTl9TVEFUSUNTIiwibmFtZSIsImxlbmd0aCIsInByb3RvdHlwZSIsImNhbGxlciIsImNhbGxlZSIsImFyZ3VtZW50cyIsImFyaXR5IiwiTUVNT19TVEFUSUNTIiwiY29tcGFyZSIsIlRZUEVfU1RBVElDUyIsImdldFN0YXRpY3MiLCJjb21wb25lbnQiLCJpc01lbW8iLCJGb3J3YXJkUmVmIiwicmVuZGVyIiwiTWVtbyIsImRlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldFByb3RvdHlwZU9mIiwib2JqZWN0UHJvdG90eXBlIiwibW9kdWxlIiwiZXhwb3J0cyIsImhvaXN0Tm9uUmVhY3RTdGF0aWNzIiwidGFyZ2V0Q29tcG9uZW50Iiwic291cmNlQ29tcG9uZW50IiwiYmxhY2tsaXN0IiwiaW5oZXJpdGVkQ29tcG9uZW50Iiwia2V5cyIsImNvbmNhdCIsInRhcmdldFN0YXRpY3MiLCJzb3VyY2VTdGF0aWNzIiwiaSIsImtleSIsImRlc2NyaXB0b3IiLCJlIiwiYiIsIlN5bWJvbCIsImZvciIsImMiLCJkIiwiZiIsImciLCJoIiwiayIsImwiLCJtIiwibiIsInAiLCJxIiwiciIsInQiLCJ2IiwidyIsIngiLCJ5IiwieiIsImEiLCJ1IiwiJCR0eXBlb2YiLCJBIiwiQXN5bmNNb2RlIiwiQ29uY3VycmVudE1vZGUiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJFbGVtZW50IiwiRnJhZ21lbnQiLCJMYXp5IiwiUG9ydGFsIiwiUHJvZmlsZXIiLCJTdHJpY3RNb2RlIiwiU3VzcGVuc2UiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlT2YiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJ0YXJnZXQiLCJzb3VyY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsInRoaXMiLCJfaW5oZXJpdHNMb29zZSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJpbmRleE9mIiwiX3NldFByb3RvdHlwZU9mIiwibyIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/576.js.LICENSE.txt b/server-data/resources/[phone]/npwd_crypto/web/dist/576.js.LICENSE.txt deleted file mode 100644 index 6f6f2bb3f..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/576.js.LICENSE.txt +++ /dev/null @@ -1,8 +0,0 @@ -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/66f64c391dee18935eaf916ddec0102c.png b/server-data/resources/[phone]/npwd_crypto/web/dist/66f64c391dee18935eaf916ddec0102c.png deleted file mode 100644 index 218a5185dd8a33658697488d81cc2fa096abcf48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43042 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 r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;nye,createInstance:()=>pe,default:()=>je,exists:()=>Oe,getFixedT:()=>me,hasLoadedNamespace:()=>we,init:()=>ge,loadLanguages:()=>Se,loadNamespaces:()=>xe,loadResources:()=>he,reloadResources:()=>de,setDefaultNamespace:()=>ke,t:()=>be,use:()=>ve});var s=n(7326),u=n(9611);function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,u.Z)(e,t)}function l(e,t){if(t&&("object"===r(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return(0,s.Z)(e)}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{};o(this,e),this.init(t,n)}return a(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||v,this.options=t,this.debug=t.debug}},{key:"setDebug",value:function(e){this.debug=e}},{key:"log",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),r=1;r-1?e.replace(/###/g,"."):e}function o(){return!e||"string"==typeof e}for(var i="string"!=typeof t?[].concat(t):t.split(".");i.length>1;){if(o())return{};var a=r(i.shift());!e[a]&&n&&(e[a]=new n),e=Object.prototype.hasOwnProperty.call(e,a)?e[a]:{}}return o()?{}:{obj:e,k:r(i.shift())}}function x(e,t,n){var r=w(e,t,Object);r.obj[r.k]=n}function S(e,t){var n=w(e,t),r=n.obj,o=n.k;if(r)return r[o]}function j(e,t,n){var r=S(e,n);return void 0!==r?r:S(t,n)}function P(e,t,n){for(var r in t)"__proto__"!==r&&"constructor"!==r&&(r in e?"string"==typeof e[r]||e[r]instanceof String||"string"==typeof t[r]||t[r]instanceof String?n&&(e[r]=t[r]):P(e[r],t[r],n):e[r]=t[r]);return e}function L(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var R={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function N(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,(function(e){return R[e]})):e}var C="undefined"!=typeof window&&window.navigator&&void 0===window.navigator.userAgentData&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,E=[" ",",","?","!",";"];function D(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function F(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:".";if(e){if(e[t])return e[t];for(var r=t.split(n),o=e,i=0;ii+a;)a++,u=o[s=r.slice(i,i+a).join(n)];if(void 0===u)return;if(null===u)return null;if(t.endsWith(s)){if("string"==typeof u)return u;if(s&&"string"==typeof u[s])return u[s]}var c=r.slice(i+a).join(n);return c?I(u,c,n):void 0}o=o[r[i]]}return o}}var A=function(e){c(i,e);var t,n,r=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=f(t);if(n){var o=f(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return l(this,e)});function i(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return o(this,i),t=r.call(this),C&&m.call((0,s.Z)(t)),t.data=e||{},t.options=n,void 0===t.options.keySeparator&&(t.options.keySeparator="."),void 0===t.options.ignoreJSONStructure&&(t.options.ignoreJSONStructure=!0),t}return a(i,[{key:"addNamespaces",value:function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}},{key:"removeNamespaces",value:function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=void 0!==r.keySeparator?r.keySeparator:this.options.keySeparator,i=void 0!==r.ignoreJSONStructure?r.ignoreJSONStructure:this.options.ignoreJSONStructure,a=[e,t];n&&"string"!=typeof n&&(a=a.concat(n)),n&&"string"==typeof n&&(a=a.concat(o?n.split(o):n)),e.indexOf(".")>-1&&(a=e.split("."));var s=S(this.data,a);return s||!i||"string"!=typeof n?s:I(this.data&&this.data[e]&&this.data[e][t],n,o)}},{key:"addResource",value:function(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},i=this.options.keySeparator;void 0===i&&(i=".");var a=[e,t];n&&(a=a.concat(i?n.split(i):n)),e.indexOf(".")>-1&&(r=t,t=(a=e.split("."))[1]),this.addNamespaces(t),x(this.data,a,r),o.silent||this.emit("added",e,t,n,r)}},{key:"addResources",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var o in n)"string"!=typeof n[o]&&"[object Array]"!==Object.prototype.toString.apply(n[o])||this.addResource(e,t,o,n[o],{silent:!0});r.silent||this.emit("added",e,t,n)}},{key:"addResourceBundle",value:function(e,t,n,r,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},a=[e,t];e.indexOf(".")>-1&&(r=n,n=t,t=(a=e.split("."))[1]),this.addNamespaces(t);var s=S(this.data,a)||{};r?P(s,n,o):s=F(F({},s),n),x(this.data,a,s),i.silent||this.emit("added",e,t,n)}},{key:"removeResourceBundle",value:function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}},{key:"hasResourceBundle",value:function(e,t){return void 0!==this.getResource(e,t)}},{key:"getResourceBundle",value:function(e,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?F(F({},{}),this.getResource(e,t)):this.getResource(e,t)}},{key:"getDataByLanguage",value:function(e){return this.data[e]}},{key:"hasLanguageSomeTranslations",value:function(e){var t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find((function(e){return t[e]&&Object.keys(t[e]).length>0}))}},{key:"toJSON",value:function(){return this.data}}]),i}(m),T={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,o){var i=this;return e.forEach((function(e){i.processors[e]&&(t=i.processors[e].process(t,n,r,o))})),t}};function V(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function U(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return o(this,u),t=i.call(this),C&&m.call((0,s.Z)(t)),k(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,(0,s.Z)(t)),t.options=n,void 0===t.options.keySeparator&&(t.options.keySeparator="."),t.logger=y.create("translator"),t}return a(u,[{key:"changeLanguage",value:function(e){e&&(this.language=e)}},{key:"exists",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==e)return!1;var n=this.resolve(e,t);return n&&void 0!==n.res}},{key:"extractFromKey",value:function(e,t){var n=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===n&&(n=":");var r=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,o=t.ns||this.options.defaultNS||[],i=n&&e.indexOf(n)>-1,a=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||function(e,t,n){t=t||"",n=n||"";var r=E.filter((function(e){return t.indexOf(e)<0&&n.indexOf(e)<0}));if(0===r.length)return!0;var o=new RegExp("(".concat(r.map((function(e){return"?"===e?"\\?":e})).join("|"),")")),i=!o.test(e);if(!i){var a=e.indexOf(n);a>0&&!o.test(e.substring(0,a))&&(i=!0)}return i}(e,n,r));if(i&&!a){var s=e.match(this.interpolator.nestingRegexp);if(s&&s.length>0)return{key:e,namespaces:o};var u=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(u[0])>-1)&&(o=u.shift()),e=u.join(r)}return"string"==typeof o&&(o=[o]),{key:e,namespaces:o}}},{key:"translate",value:function(e,t,n){var o=this;if("object"!==r(t)&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),t||(t={}),null==e)return"";Array.isArray(e)||(e=[String(e)]);var i=void 0!==t.returnDetails?t.returnDetails:this.options.returnDetails,a=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,s=this.extractFromKey(e[e.length-1],t),c=s.key,l=s.namespaces,f=l[l.length-1],p=t.lng||this.language,g=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(p&&"cimode"===p.toLowerCase()){if(g){var h=t.nsSeparator||this.options.nsSeparator;return i?(d.res="".concat(f).concat(h).concat(c),d):"".concat(f).concat(h).concat(c)}return i?(d.res=c,d):c}var d=this.resolve(e,t),v=d&&d.res,y=d&&d.usedKey||c,m=d&&d.exactUsedKey||c,b=Object.prototype.toString.apply(v),O=["[object Number]","[object Function]","[object RegExp]"],k=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject,x="string"!=typeof v&&"boolean"!=typeof v&&"number"!=typeof v;if(w&&v&&x&&O.indexOf(b)<0&&("string"!=typeof k||"[object Array]"!==b)){if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var S=this.options.returnedObjectHandler?this.options.returnedObjectHandler(y,v,U(U({},t),{},{ns:l})):"key '".concat(c," (").concat(this.language,")' returned an object instead of string.");return i?(d.res=S,d):S}if(a){var j="[object Array]"===b,P=j?[]:{},L=j?m:y;for(var R in v)if(Object.prototype.hasOwnProperty.call(v,R)){var N="".concat(L).concat(a).concat(R);P[R]=this.translate(N,U(U({},t),{joinArrays:!1,ns:l})),P[R]===N&&(P[R]=v[R])}v=P}}else if(w&&"string"==typeof k&&"[object Array]"===b)(v=v.join(k))&&(v=this.extendTranslation(v,e,t,n));else{var C=!1,E=!1,D=void 0!==t.count&&"string"!=typeof t.count,F=u.hasDefaultValue(t),I=D?this.pluralResolver.getSuffix(p,t.count,t):"",A=t["defaultValue".concat(I)]||t.defaultValue;!this.isValidLookup(v)&&F&&(C=!0,v=A),this.isValidLookup(v)||(E=!0,v=c);var T=t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,V=T&&E?void 0:v,K=F&&A!==v&&this.options.updateMissing;if(E||C||K){if(this.logger.log(K?"updateKey":"missingKey",p,f,c,K?A:v),a){var B=this.resolve(c,U(U({},t),{},{keySeparator:!1}));B&&B.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var M=[],H=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if("fallback"===this.options.saveMissingTo&&H&&H[0])for(var z=0;z1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach((function(e){if(!a.isValidLookup(t)){var u=a.extractFromKey(e,s),c=u.key;n=c;var l=u.namespaces;a.options.fallbackNS&&(l=l.concat(a.options.fallbackNS));var f=void 0!==s.count&&"string"!=typeof s.count,p=f&&!s.ordinal&&0===s.count&&a.pluralResolver.shouldUseIntlApi(),g=void 0!==s.context&&("string"==typeof s.context||"number"==typeof s.context)&&""!==s.context,h=s.lngs?s.lngs:a.languageUtils.toResolveHierarchy(s.lng||a.language,s.fallbackLng);l.forEach((function(e){a.isValidLookup(t)||(i=e,!K["".concat(h[0],"-").concat(e)]&&a.utils&&a.utils.hasLoadedNamespace&&!a.utils.hasLoadedNamespace(i)&&(K["".concat(h[0],"-").concat(e)]=!0,a.logger.warn('key "'.concat(n,'" for languages "').concat(h.join(", "),'" won\'t get resolved as namespace "').concat(i,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),h.forEach((function(n){if(!a.isValidLookup(t)){o=n;var i,u=[c];if(a.i18nFormat&&a.i18nFormat.addLookupKeys)a.i18nFormat.addLookupKeys(u,c,n,e,s);else{var l;f&&(l=a.pluralResolver.getSuffix(n,s.count,s));var h="".concat(a.options.pluralSeparator,"zero");if(f&&(u.push(c+l),p&&u.push(c+h)),g){var d="".concat(c).concat(a.options.contextSeparator).concat(s.context);u.push(d),f&&(u.push(d+l),p&&u.push(d+h))}}for(;i=u.pop();)a.isValidLookup(t)||(r=i,t=a.getResource(n,e,i,s))}})))}))}})),{res:t,usedKey:n,exactUsedKey:r,usedLng:o,usedNS:i}}},{key:"isValidLookup",value:function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}}],[{key:"hasDefaultValue",value:function(e){var t="defaultValue";for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t===n.substring(0,t.length)&&void 0!==e[n])return!0;return!1}}]),u}(m);function M(e){return e.charAt(0).toUpperCase()+e.slice(1)}var H=function(){function e(t){o(this,e),this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=y.create("languageUtils")}return a(e,[{key:"getScriptPartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return null;var t=e.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}},{key:"getLanguagePartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return e;var t=e.split("-");return this.formatLanguageCode(t[0])}},{key:"formatLanguageCode",value:function(e){if("string"==typeof e&&e.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],n=e.split("-");return this.options.lowerCaseLng?n=n.map((function(e){return e.toLowerCase()})):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=M(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),"sgn"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=M(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=M(n[2].toLowerCase()))),n.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}},{key:"isSupportedCode",value:function(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}},{key:"getBestMatchFromCodes",value:function(e){var t,n=this;return e?(e.forEach((function(e){if(!t){var r=n.formatLanguageCode(e);n.options.supportedLngs&&!n.isSupportedCode(r)||(t=r)}})),!t&&this.options.supportedLngs&&e.forEach((function(e){if(!t){var r=n.getLanguagePartFromCode(e);if(n.isSupportedCode(r))return t=r;t=n.options.supportedLngs.find((function(e){if(0===e.indexOf(r))return e}))}})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t):null}},{key:"getFallbackCodes",value:function(e,t){if(!e)return[];if("function"==typeof e&&(e=e(t)),"string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e[this.getLanguagePartFromCode(t)]),n||(n=e.default),n||[]}},{key:"toResolveHierarchy",value:function(e,t){var n=this,r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),o=[],i=function(e){e&&(n.isSupportedCode(e)?o.push(e):n.logger.warn("rejecting language code not found in supportedLngs: ".concat(e)))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&i(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&i(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&i(this.getLanguagePartFromCode(e))):"string"==typeof e&&i(this.formatLanguageCode(e)),r.forEach((function(e){o.indexOf(e)<0&&i(n.formatLanguageCode(e))})),o}}]),e}(),z=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],J={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1&&e%100!=11?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0==e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)},22:function(e){return Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)}},_=["v1","v2","v3"],q={zero:0,one:1,two:2,few:3,many:4,other:5};function $(){var e={};return z.forEach((function(t){t.lngs.forEach((function(n){e[n]={numbers:t.nr,plurals:J[t.fc]}}))})),e}var Z=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};o(this,e),this.languageUtils=t,this.options=n,this.logger=y.create("pluralResolver"),this.options.compatibilityJSON&&"v4"!==this.options.compatibilityJSON||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=$()}return a(e,[{key:"addRule",value:function(e,t){this.rules[e]=t}},{key:"getRule",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(e,{type:t.ordinal?"ordinal":"cardinal"})}catch(e){return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}},{key:"needsPlural",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.getRule(e,t);return this.shouldUseIntlApi()?n&&n.resolvedOptions().pluralCategories.length>1:n&&n.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(e,n).map((function(e){return"".concat(t).concat(e)}))}},{key:"getSuffixes",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.getRule(e,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((function(e,t){return q[e]-q[t]})).map((function(e){return"".concat(t.options.prepend).concat(e)})):r.numbers.map((function(r){return t.getSuffix(e,r,n)})):[]}},{key:"getSuffix",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.getRule(e,n);return r?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(r.select(t)):this.getSuffixRetroCompatible(r,t):(this.logger.warn("no plural rule found for: ".concat(e)),"")}},{key:"getSuffixRetroCompatible",value:function(e,t){var n=this,r=e.noAbs?e.plurals(t):e.plurals(Math.abs(t)),o=e.numbers[r];this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]&&(2===o?o="plural":1===o&&(o=""));var i=function(){return n.options.prepend&&o.toString()?n.options.prepend+o.toString():o.toString()};return"v1"===this.options.compatibilityJSON?1===o?"":"number"==typeof o?"_plural_".concat(o.toString()):i():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]?i():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}},{key:"shouldUseIntlApi",value:function(){return!_.includes(this.options.compatibilityJSON)}}]),e}();function W(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Y(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};o(this,e),this.logger=y.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(e){return e},this.init(t)}return a(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escape=void 0!==t.escape?t.escape:N,this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.useRawValueToEscape=void 0!==t.useRawValueToEscape&&t.useRawValueToEscape,this.prefix=t.prefix?L(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?L(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?L(t.nestingPrefix):t.nestingPrefixEscaped||L("$t("),this.nestingSuffix=t.nestingSuffix?L(t.nestingSuffix):t.nestingSuffixEscaped||L(")"),this.nestingOptionsSeparator=t.nestingOptionsSeparator?t.nestingOptionsSeparator:t.nestingOptionsSeparator||",",this.maxReplaces=t.maxReplaces?t.maxReplaces:1e3,this.alwaysFormat=void 0!==t.alwaysFormat&&t.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var e="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(e,"g");var t="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(t,"g");var n="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(n,"g")}},{key:"interpolate",value:function(e,t,n,r){var o,i,a,s=this,u=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(e){return e.replace(/\$/g,"$$$$")}var l=function(e){if(e.indexOf(s.formatSeparator)<0){var o=j(t,u,e);return s.alwaysFormat?s.format(o,void 0,n,Y(Y(Y({},r),t),{},{interpolationkey:e})):o}var i=e.split(s.formatSeparator),a=i.shift().trim(),c=i.join(s.formatSeparator).trim();return s.format(j(t,u,a),c,n,Y(Y(Y({},r),t),{},{interpolationkey:a}))};this.resetRegExp();var f=r&&r.missingInterpolationHandler||this.options.missingInterpolationHandler,p=r&&r.interpolation&&void 0!==r.interpolation.skipOnVariables?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(e){return c(e)}},{regex:this.regexp,safeValue:function(e){return s.escapeValue?c(s.escape(e)):c(e)}}].forEach((function(t){for(a=0;o=t.regex.exec(e);){var n=o[1].trim();if(void 0===(i=l(n)))if("function"==typeof f){var u=f(e,o,r);i="string"==typeof u?u:""}else if(r&&r.hasOwnProperty(n))i="";else{if(p){i=o[0];continue}s.logger.warn("missed to pass in variable ".concat(n," for interpolating ").concat(e)),i=""}else"string"==typeof i||s.useRawValueToEscape||(i=O(i));var c=t.safeValue(i);if(e=e.replace(o[0],c),p?(t.regex.lastIndex+=i.length,t.regex.lastIndex-=o[0].length):t.regex.lastIndex=0,++a>=s.maxReplaces)break}})),e}},{key:"nest",value:function(e,t){var n,r,o=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=Y({},i);function s(e,t){var n=this.nestingOptionsSeparator;if(e.indexOf(n)<0)return e;var r=e.split(new RegExp("".concat(n,"[ ]*{"))),o="{".concat(r[1]);e=r[0],o=(o=this.interpolate(o,a)).replace(/'/g,'"');try{a=JSON.parse(o),t&&(a=Y(Y({},t),a))}catch(t){return this.logger.warn("failed parsing options string in nesting for key ".concat(e),t),"".concat(e).concat(n).concat(o)}return delete a.defaultValue,e}for(a.applyPostProcessor=!1,delete a.defaultValue;n=this.nestingRegexp.exec(e);){var u=[],c=!1;if(-1!==n[0].indexOf(this.formatSeparator)&&!/{.*}/.test(n[1])){var l=n[1].split(this.formatSeparator).map((function(e){return e.trim()}));n[1]=l.shift(),u=l,c=!0}if((r=t(s.call(this,n[1].trim(),a),a))&&n[0]===e&&"string"!=typeof r)return r;"string"!=typeof r&&(r=O(r)),r||(this.logger.warn("missed to resolve ".concat(n[1]," for nesting ").concat(e)),r=""),c&&(r=u.reduce((function(e,t){return o.format(e,t,i.lng,Y(Y({},i),{},{interpolationkey:n[1].trim()}))}),r.trim())),e=e.replace(n[0],r),this.regexp.lastIndex=0}return e}}]),e}();function Q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function X(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};o(this,e),this.logger=y.create("formatter"),this.options=t,this.formats={number:function(e,t,n){return new Intl.NumberFormat(t,n).format(e)},currency:function(e,t,n){return new Intl.NumberFormat(t,X(X({},n),{},{style:"currency"})).format(e)},datetime:function(e,t,n){return new Intl.DateTimeFormat(t,X({},n)).format(e)},relativetime:function(e,t,n){return new Intl.RelativeTimeFormat(t,X({},n)).format(e,n.range||"day")},list:function(e,t,n){return new Intl.ListFormat(t,X({},n)).format(e)}},this.init(t)}return a(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}},n=t.interpolation;this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||","}},{key:"add",value:function(e,t){this.formats[e.toLowerCase().trim()]=t}},{key:"format",value:function(e,t,n,r){var o=this;return t.split(this.formatSeparator).reduce((function(e,t){var i=function(e){var t=e.toLowerCase().trim(),n={};if(e.indexOf("(")>-1){var r=e.split("(");t=r[0].toLowerCase().trim();var o=r[1].substring(0,r[1].length-1);"currency"===t&&o.indexOf(":")<0?n.currency||(n.currency=o.trim()):"relativetime"===t&&o.indexOf(":")<0?n.range||(n.range=o.trim()):o.split(";").forEach((function(e){if(e){var t=function(e){if(Array.isArray(e))return e}(i=e.split(":"))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),r=t[0],o=t.slice(1).join(":").trim().replace(/^'+|'+$/g,"");n[r.trim()]||(n[r.trim()]=o),"false"===o&&(n[r.trim()]=!1),"true"===o&&(n[r.trim()]=!0),isNaN(o)||(n[r.trim()]=parseInt(o,10))}var i}))}return{formatName:t,formatOptions:n}}(t),a=i.formatName,s=i.formatOptions;if(o.formats[a]){var u=e;try{var c=r&&r.formatParams&&r.formatParams[r.interpolationkey]||{},l=c.locale||c.lng||r.locale||r.lng||n;u=o.formats[a](e,l,X(X(X({},s),r),c))}catch(e){o.logger.warn(e)}return u}return o.logger.warn("there was no format function for ".concat(a)),e}),e)}}]),e}();function te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ne(e){for(var t=1;t3&&void 0!==arguments[3]?arguments[3]:{};return o(this,i),a=r.call(this),C&&m.call((0,s.Z)(a)),a.backend=e,a.store=t,a.services=n,a.languageUtils=n.languageUtils,a.options=u,a.logger=y.create("backendConnector"),a.waitingReads=[],a.maxParallelReads=u.maxParallelReads||10,a.readingCalls=0,a.state={},a.queue=[],a.backend&&a.backend.init&&a.backend.init(n,u.backend,u),a}return a(i,[{key:"queueLoad",value:function(e,t,n,r){var o=this,i={},a={},s={},u={};return e.forEach((function(e){var r=!0;t.forEach((function(t){var s="".concat(e,"|").concat(t);!n.reload&&o.store.hasResourceBundle(e,t)?o.state[s]=2:o.state[s]<0||(1===o.state[s]?void 0===a[s]&&(a[s]=!0):(o.state[s]=1,r=!1,void 0===a[s]&&(a[s]=!0),void 0===i[s]&&(i[s]=!0),void 0===u[t]&&(u[t]=!0)))})),r||(s[e]=!0)})),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(u)}}},{key:"loaded",value:function(e,t,n){var r=e.split("|"),o=r[0],i=r[1];t&&this.emit("failedLoading",o,i,t),n&&this.store.addResourceBundle(o,i,n),this.state[e]=t?-1:2;var a={};this.queue.forEach((function(n){var r,s,u,c,l;r=n.loaded,s=i,(c=(u=w(r,[o],Object)).obj)[l=u.k]=c[l]||[],c[l].push(s),function(e,t){void 0!==e.pending[t]&&(delete e.pending[t],e.pendingCount--)}(n,e),t&&n.errors.push(t),0!==n.pendingCount||n.done||(Object.keys(n.loaded).forEach((function(e){a[e]||(a[e]={});var t=n.loaded[e];t.length&&t.forEach((function(t){void 0===a[e][t]&&(a[e][t]=!0)}))})),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())})),this.emit("loaded",a),this.queue=this.queue.filter((function(e){return!e.done}))}},{key:"read",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:350,a=arguments.length>5?arguments[5]:void 0;return e.length?this.readingCalls>=this.maxParallelReads?void this.waitingReads.push({lng:e,ns:t,fcName:n,tried:o,wait:i,callback:a}):(this.readingCalls++,this.backend[n](e,t,(function(s,u){if(r.readingCalls--,r.waitingReads.length>0){var c=r.waitingReads.shift();r.read(c.lng,c.ns,c.fcName,c.tried,c.wait,c.callback)}s&&u&&o<5?setTimeout((function(){r.read.call(r,e,t,n,o+1,2*i,a)}),i):a(s,u)}))):a(null,{})}},{key:"prepareLoading",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),o&&o();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);var i=this.queueLoad(e,t,r,o);if(!i.toLoad.length)return i.pending.length||o(),null;i.toLoad.forEach((function(e){n.loadOne(e)}))}},{key:"load",value:function(e,t,n){this.prepareLoading(e,t,{},n)}},{key:"reload",value:function(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}},{key:"loadOne",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=e.split("|"),o=r[0],i=r[1];this.read(o,i,"read",void 0,void 0,(function(r,a){r&&t.logger.warn("".concat(n,"loading namespace ").concat(i," for language ").concat(o," failed"),r),!r&&a&&t.logger.log("".concat(n,"loaded namespace ").concat(i," for language ").concat(o),a),t.loaded(e,r,a)}))}},{key:"saveMissing",value:function(e,t,n,r,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)?this.logger.warn('did not save key "'.concat(n,'" as the namespace "').concat(t,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!"):null!=n&&""!==n&&(this.backend&&this.backend.create&&this.backend.create(e,t,n,r,null,ne(ne({},i),{},{isUpdate:o})),e&&e[0]&&this.store.addResource(e[0],t,n,r))}}]),i}(m);function oe(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){var t={};if("object"===r(e[1])&&(t=e[1]),"string"==typeof e[1]&&(t.defaultValue=e[1]),"string"==typeof e[2]&&(t.tDescription=e[2]),"object"===r(e[2])||"object"===r(e[3])){var n=e[3]||e[2];Object.keys(n).forEach((function(e){t[e]=n[e]}))}return t},interpolation:{escapeValue:!0,format:function(e,t,n,r){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ie(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function se(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(o(this,u),e=i.call(this),C&&m.call((0,s.Z)(e)),e.options=ie(t),e.services={},e.logger=y,e.modules={external:[]},ce((0,s.Z)(e)),n&&!e.isInitialized&&!t.isClone){if(!e.options.initImmediate)return e.init(t,n),l(e,(0,s.Z)(e));setTimeout((function(){e.init(t,n)}),0)}return e}return a(u,[{key:"init",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;"function"==typeof t&&(n=t,t={}),!t.defaultNS&&t.ns&&("string"==typeof t.ns?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));var r=oe();function o(e){return e?"function"==typeof e?new e:e:null}if(this.options=se(se(se({},r),this.options),ie(t)),"v1"!==this.options.compatibilityAPI&&(this.options.interpolation=se(se({},r.interpolation),this.options.interpolation)),void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator),!this.options.isClone){var i;this.modules.logger?y.init(o(this.modules.logger),this.options):y.init(null,this.options),this.modules.formatter?i=this.modules.formatter:"undefined"!=typeof Intl&&(i=ee);var a=new H(this.options);this.store=new A(this.options.resources,this.options);var s=this.services;s.logger=y,s.resourceStore=this.store,s.languageUtils=a,s.pluralResolver=new Z(a,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!i||this.options.interpolation.format&&this.options.interpolation.format!==r.interpolation.format||(s.formatter=o(i),s.formatter.init(s,this.options),this.options.interpolation.format=s.formatter.format.bind(s.formatter)),s.interpolator=new G(this.options),s.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},s.backendConnector=new re(o(this.modules.backend),s.resourceStore,s,this.options),s.backendConnector.on("*",(function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o1?n-1:0),o=1;o0&&"dev"!==u[0]&&(this.options.lng=u[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");var c=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];c.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments)}}));var l=["addResource","addResources","addResourceBundle","removeResourceBundle"];l.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments),e}}));var f=b(),p=function(){var t=function(t,r){e.isInitialized&&!e.initializedStoreOnce&&e.logger.warn("init: i18next is already initialized. You should call init just once!"),e.isInitialized=!0,e.options.isClone||e.logger.log("initialized",e.options),e.emit("initialized",e.options),f.resolve(r),n(t,r)};if(e.languages&&"v1"!==e.options.compatibilityAPI&&!e.isInitialized)return t(null,e.t.bind(e));e.changeLanguage(e.options.lng,t)};return this.options.resources||!this.options.initImmediate?p():setTimeout(p,0),f}},{key:"loadResources",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ue,r=n,o="string"==typeof e?e:this.language;if("function"==typeof e&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(o&&"cimode"===o.toLowerCase())return r();var i=[],a=function(e){e&&t.services.languageUtils.toResolveHierarchy(e).forEach((function(e){i.indexOf(e)<0&&i.push(e)}))};if(o)a(o);else{var s=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);s.forEach((function(e){return a(e)}))}this.options.preload&&this.options.preload.forEach((function(e){return a(e)})),this.services.backendConnector.load(i,this.options.ns,(function(e){e||t.resolvedLanguage||!t.language||t.setResolvedLanguage(t.language),r(e)}))}else r(null)}},{key:"reloadResources",value:function(e,t,n){var r=b();return e||(e=this.languages),t||(t=this.options.ns),n||(n=ue),this.services.backendConnector.reload(e,t,(function(e){r.resolve(),n(e)})),r}},{key:"use",value:function(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&T.addPostProcessor(e),"formatter"===e.type&&(this.modules.formatter=e),"3rdParty"===e.type&&this.modules.external.push(e),this}},{key:"setResolvedLanguage",value:function(e){if(e&&this.languages&&!(["cimode","dev"].indexOf(e)>-1))for(var t=0;t-1)&&this.store.hasLanguageSomeTranslations(n)){this.resolvedLanguage=n;break}}}},{key:"changeLanguage",value:function(e,t){var n=this;this.isLanguageChangingTo=e;var r=b();this.emit("languageChanging",e);var o=function(e){n.language=e,n.languages=n.services.languageUtils.toResolveHierarchy(e),n.resolvedLanguage=void 0,n.setResolvedLanguage(e)},i=function(i){e||i||!n.services.languageDetector||(i=[]);var a="string"==typeof i?i:n.services.languageUtils.getBestMatchFromCodes(i);a&&(n.language||o(a),n.translator.language||n.translator.changeLanguage(a),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage(a)),n.loadResources(a,(function(e){!function(e,i){i?(o(i),n.translator.changeLanguage(i),n.isLanguageChangingTo=void 0,n.emit("languageChanged",i),n.logger.log("languageChanged",i)):n.isLanguageChangingTo=void 0,r.resolve((function(){return n.t.apply(n,arguments)})),t&&t(e,(function(){return n.t.apply(n,arguments)}))}(e,a)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(i):i(e):i(this.services.languageDetector.detect()),r}},{key:"getFixedT",value:function(e,t,n){var o=this,i=function e(t,i){var a;if("object"!==r(i)){for(var s=arguments.length,u=new Array(s>2?s-2:0),c=2;c1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var r=this.resolvedLanguage||this.languages[0],o=!!this.options&&this.options.fallbackLng,i=this.languages[this.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};if(n.precheck){var s=n.precheck(this,a);if(void 0!==s)return s}return!(!this.hasResourceBundle(r,e)&&this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}},{key:"loadNamespaces",value:function(e,t){var n=this,r=b();return this.options.ns?("string"==typeof e&&(e=[e]),e.forEach((function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)})),this.loadResources((function(e){r.resolve(),t&&t(e)})),r):(t&&t(),Promise.resolve())}},{key:"loadLanguages",value:function(e,t){var n=b();"string"==typeof e&&(e=[e]);var r=this.options.preload||[],o=e.filter((function(e){return r.indexOf(e)<0}));return o.length?(this.options.preload=r.concat(o),this.loadResources((function(e){n.resolve(),t&&t(e)})),n):(t&&t(),Promise.resolve())}},{key:"dir",value:function(e){return e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),e?["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(this.services.languageUtils.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr":"rtl"}},{key:"cloneInstance",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ue,r=se(se(se({},this.options),t),{isClone:!0}),o=new u(r),i=["store","services","language"];return i.forEach((function(t){o[t]=e[t]})),o.services=se({},this.services),o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o.translator=new B(o.services,o.options),o.translator.on("*",(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new le(e,t)}));var fe=le.createInstance();fe.createInstance=le.createInstance;var pe=fe.createInstance,ge=fe.init,he=fe.loadResources,de=fe.reloadResources,ve=fe.use,ye=fe.changeLanguage,me=fe.getFixedT,be=fe.t,Oe=fe.exists,ke=fe.setDefaultNamespace,we=fe.hasLoadedNamespace,xe=fe.loadNamespaces,Se=fe.loadLanguages;const je=fe}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBRyxHQUNSRixHQUFJLEdBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxLQUFNLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxNQUFPLE1BQU8sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLE1BQU8sS0FBTSxNQUFPLE1BQU8sS0FBTSxRQUFTLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFDell1RixHQUFJLENBQUMsRUFBRyxHQUNSRixHQUFJLEdBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxLQUFNLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLE1BQU8sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxNQUN4SXVGLEdBQUksQ0FBQyxHQUNMRixHQUFJLEdBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxLQUFNLEtBQU0sTUFBTyxLQUFNLEtBQU0sS0FBTSxLQUFNLE1BQ2xEdUYsR0FBSSxDQUFDLEVBQUcsRUFBRyxHQUNYRixHQUFJLEdBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxNQUNQdUYsR0FBSSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxLQUNyQkYsR0FBSSxHQUNILENBQ0RyRixLQUFNLENBQUMsS0FBTSxNQUNidUYsR0FBSSxDQUFDLEVBQUcsRUFBRyxHQUNYRixHQUFJLEdBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxNQUFPLE1BQ2R1RixHQUFJLENBQUMsRUFBRyxFQUFHLEdBQ1hGLEdBQUksR0FDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FDZEYsR0FBSSxHQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEdBQ1JGLEdBQUksR0FDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUNqQkYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEVBQUcsRUFBRyxJQUNkRixHQUFJLElBQ0gsQ0FDRHJGLEtBQU0sQ0FBQyxNQUNQdUYsR0FBSSxDQUFDLEVBQUcsR0FDUkYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEdBQ1JGLEdBQUksSUFDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FDZEYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEVBQUcsSUFDWEYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEVBQUcsR0FDWEYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEdBQ1JGLEdBQUksSUFDSCxDQUNEckYsS0FBTSxDQUFDLE9BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEdBQ1hGLEdBQUksSUFDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEdBQUksSUFDZkYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsTUFDUHVGLEdBQUksQ0FBQyxFQUFHLEdBQ1JGLEdBQUksR0FDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLElBQ1hGLEdBQUksSUFDSCxDQUNEckYsS0FBTSxDQUFDLE1BQ1B1RixHQUFJLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FDZEYsR0FBSSxJQUNILENBQ0RyRixLQUFNLENBQUMsS0FBTSxNQUNidUYsR0FBSSxDQUFDLEVBQUcs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bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXNtL2kxOG5leHQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZic7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMnO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4nO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZic7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBfdG9BcnJheSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0FycmF5JztcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG52YXIgY29uc29sZUxvZ2dlciA9IHtcbiAgdHlwZTogJ2xvZ2dlcicsXG4gIGxvZzogZnVuY3Rpb24gbG9nKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnbG9nJywgYXJncyk7XG4gIH0sXG4gIHdhcm46IGZ1bmN0aW9uIHdhcm4oYXJncykge1xuICAgIHRoaXMub3V0cHV0KCd3YXJuJywgYXJncyk7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2Vycm9yJywgYXJncyk7XG4gIH0sXG4gIG91dHB1dDogZnVuY3Rpb24gb3V0cHV0KHR5cGUsIGFyZ3MpIHtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlW3R5cGVdKSBjb25zb2xlW3R5cGVdLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59O1xuXG52YXIgTG9nZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMb2dnZXIoY29uY3JldGVMb2dnZXIpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTG9nZ2VyKTtcblxuICAgIHRoaXMuaW5pdChjb25jcmV0ZUxvZ2dlciwgb3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTG9nZ2VyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoY29uY3JldGVMb2dnZXIpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHRoaXMucHJlZml4ID0gb3B0aW9ucy5wcmVmaXggfHwgJ2kxOG5leHQ6JztcbiAgICAgIHRoaXMubG9nZ2VyID0gY29uY3JldGVMb2dnZXIgfHwgY29uc29sZUxvZ2dlcjtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB0aGlzLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0RGVidWdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0RGVidWcoYm9vbCkge1xuICAgICAgdGhpcy5kZWJ1ZyA9IGJvb2w7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2coKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnbG9nJywgJycsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3YXJuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm4oKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICd3YXJuJywgJycsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlcnJvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ2Vycm9yJywgJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZXByZWNhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVwcmVjYXRlKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnd2FybicsICdXQVJOSU5HIERFUFJFQ0FURUQ6ICcsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3J3YXJkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcndhcmQoYXJncywgbHZsLCBwcmVmaXgsIGRlYnVnT25seSkge1xuICAgICAgaWYgKGRlYnVnT25seSAmJiAhdGhpcy5kZWJ1ZykgcmV0dXJuIG51bGw7XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSBhcmdzWzBdID0gXCJcIi5jb25jYXQocHJlZml4KS5jb25jYXQodGhpcy5wcmVmaXgsIFwiIFwiKS5jb25jYXQoYXJnc1swXSk7XG4gICAgICByZXR1cm4gdGhpcy5sb2dnZXJbbHZsXShhcmdzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZShtb2R1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gbmV3IExvZ2dlcih0aGlzLmxvZ2dlciwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB7XG4gICAgICAgIHByZWZpeDogXCJcIi5jb25jYXQodGhpcy5wcmVmaXgsIFwiOlwiKS5jb25jYXQobW9kdWxlTmFtZSwgXCI6XCIpXG4gICAgICB9KSwgdGhpcy5vcHRpb25zKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExvZ2dlcjtcbn0oKTtcblxudmFyIGJhc2VMb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRFbWl0dGVyKTtcblxuICAgIHRoaXMub2JzZXJ2ZXJzID0ge307XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXZlbnRFbWl0dGVyLCBbe1xuICAgIGtleTogXCJvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbihldmVudHMsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdID0gX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XSB8fCBbXTtcblxuICAgICAgICBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib2ZmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnNbZXZlbnRdKSByZXR1cm47XG5cbiAgICAgIGlmICghbGlzdGVuZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMub2JzZXJ2ZXJzW2V2ZW50XTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9ic2VydmVyc1tldmVudF0gPSB0aGlzLm9ic2VydmVyc1tldmVudF0uZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgIHJldHVybiBsICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWl0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1tldmVudF0pIHtcbiAgICAgICAgdmFyIGNsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1tldmVudF0pO1xuICAgICAgICBjbG9uZWQuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXJzWycqJ10pIHtcbiAgICAgICAgdmFyIF9jbG9uZWQgPSBbXS5jb25jYXQodGhpcy5vYnNlcnZlcnNbJyonXSk7XG5cbiAgICAgICAgX2Nsb25lZC5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICAgIG9ic2VydmVyLmFwcGx5KG9ic2VydmVyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdmVudEVtaXR0ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIGRlZmVyKCkge1xuICB2YXIgcmVzO1xuICB2YXIgcmVqO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXMgPSByZXNvbHZlO1xuICAgIHJlaiA9IHJlamVjdDtcbiAgfSk7XG4gIHByb21pc2UucmVzb2x2ZSA9IHJlcztcbiAgcHJvbWlzZS5yZWplY3QgPSByZWo7XG4gIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gbWFrZVN0cmluZyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gJyc7XG4gIHJldHVybiAnJyArIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGNvcHkoYSwgcywgdCkge1xuICBhLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBpZiAoc1ttXSkgdFttXSA9IHNbbV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRMYXN0T2ZQYXRoKG9iamVjdCwgcGF0aCwgRW1wdHkpIHtcbiAgZnVuY3Rpb24gY2xlYW5LZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSAmJiBrZXkuaW5kZXhPZignIyMjJykgPiAtMSA/IGtleS5yZXBsYWNlKC8jIyMvZywgJy4nKSA6IGtleTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkge1xuICAgIHJldHVybiAhb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgdmFyIHN0YWNrID0gdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnID8gW10uY29uY2F0KHBhdGgpIDogcGF0aC5zcGxpdCgnLicpO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkpIHJldHVybiB7fTtcbiAgICB2YXIga2V5ID0gY2xlYW5LZXkoc3RhY2suc2hpZnQoKSk7XG4gICAgaWYgKCFvYmplY3Rba2V5XSAmJiBFbXB0eSkgb2JqZWN0W2tleV0gPSBuZXcgRW1wdHkoKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0ID0ge307XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkpIHJldHVybiB7fTtcbiAgcmV0dXJuIHtcbiAgICBvYmo6IG9iamVjdCxcbiAgICBrOiBjbGVhbktleShzdGFjay5zaGlmdCgpKVxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXRQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aC5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGguaztcblxuICBvYmpba10gPSBuZXdWYWx1ZTtcbn1cbmZ1bmN0aW9uIHB1c2hQYXRoKG9iamVjdCwgcGF0aCwgbmV3VmFsdWUsIGNvbmNhdCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgyID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIE9iamVjdCksXG4gICAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDIub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoMi5rO1xuXG4gIG9ialtrXSA9IG9ialtrXSB8fCBbXTtcbiAgaWYgKGNvbmNhdCkgb2JqW2tdID0gb2JqW2tdLmNvbmNhdChuZXdWYWx1ZSk7XG4gIGlmICghY29uY2F0KSBvYmpba10ucHVzaChuZXdWYWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRQYXRoKG9iamVjdCwgcGF0aCkge1xuICB2YXIgX2dldExhc3RPZlBhdGgzID0gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgzLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDMuaztcblxuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9ialtrXTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhXaXRoRGVmYXVsdHMoZGF0YSwgZGVmYXVsdERhdGEsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRQYXRoKGRhdGEsIGtleSk7XG5cbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gZ2V0UGF0aChkZWZhdWx0RGF0YSwga2V5KTtcbn1cbmZ1bmN0aW9uIGRlZXBFeHRlbmQodGFyZ2V0LCBzb3VyY2UsIG92ZXJ3cml0ZSkge1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgIGlmIChwcm9wICE9PSAnX19wcm90b19fJyAmJiBwcm9wICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHRhcmdldFtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2Ygc291cmNlW3Byb3BdID09PSAnc3RyaW5nJyB8fCBzb3VyY2VbcHJvcF0gaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICBpZiAob3ZlcndyaXRlKSB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVlcEV4dGVuZCh0YXJnZXRbcHJvcF0sIHNvdXJjZVtwcm9wXSwgb3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiByZWdleEVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZywgJ1xcXFwkJicpO1xufVxudmFyIF9lbnRpdHlNYXAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5OycsXG4gICcvJzogJyYjeDJGOydcbn07XG5mdW5jdGlvbiBlc2NhcGUoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvWyY8PlwiJ1xcL10vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBfZW50aXR5TWFwW3NdO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG52YXIgaXNJRTEwID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnREYXRhID09PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbnZhciBjaGFycyA9IFsnICcsICcsJywgJz8nLCAnIScsICc7J107XG5mdW5jdGlvbiBsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcikge1xuICBuc1NlcGFyYXRvciA9IG5zU2VwYXJhdG9yIHx8ICcnO1xuICBrZXlTZXBhcmF0b3IgPSBrZXlTZXBhcmF0b3IgfHwgJyc7XG4gIHZhciBwb3NzaWJsZUNoYXJzID0gY2hhcnMuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIG5zU2VwYXJhdG9yLmluZGV4T2YoYykgPCAwICYmIGtleVNlcGFyYXRvci5pbmRleE9mKGMpIDwgMDtcbiAgfSk7XG4gIGlmIChwb3NzaWJsZUNoYXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIihcIi5jb25jYXQocG9zc2libGVDaGFycy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gJz8nID8gJ1xcXFw/JyA6IGM7XG4gIH0pLmpvaW4oJ3wnKSwgXCIpXCIpKTtcbiAgdmFyIG1hdGNoZWQgPSAhci50ZXN0KGtleSk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgdmFyIGtpID0ga2V5LmluZGV4T2Yoa2V5U2VwYXJhdG9yKTtcblxuICAgIGlmIChraSA+IDAgJiYgIXIudGVzdChrZXkuc3Vic3RyaW5nKDAsIGtpKSkpIHtcbiAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzJDEob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDEodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQxKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMShPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIGRlZXBGaW5kKG9iaiwgcGF0aCkge1xuICB2YXIga2V5U2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnLic7XG4gIGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAob2JqW3BhdGhdKSByZXR1cm4gb2JqW3BhdGhdO1xuICB2YXIgcGF0aHMgPSBwYXRoLnNwbGl0KGtleVNlcGFyYXRvcik7XG4gIHZhciBjdXJyZW50ID0gb2JqO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRbcGF0aHNbaV1dID09PSAnc3RyaW5nJyAmJiBpICsgMSA8IHBhdGhzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFtwYXRoc1tpXV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGogPSAyO1xuICAgICAgdmFyIHAgPSBwYXRocy5zbGljZShpLCBpICsgaikuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgdmFyIG1peCA9IGN1cnJlbnRbcF07XG5cbiAgICAgIHdoaWxlIChtaXggPT09IHVuZGVmaW5lZCAmJiBwYXRocy5sZW5ndGggPiBpICsgaikge1xuICAgICAgICBqKys7XG4gICAgICAgIHAgPSBwYXRocy5zbGljZShpLCBpICsgaikuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgICBtaXggPSBjdXJyZW50W3BdO1xuICAgICAgfVxuXG4gICAgICBpZiAobWl4ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAobWl4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgICAgaWYgKHBhdGguZW5kc1dpdGgocCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtaXggPT09ICdzdHJpbmcnKSByZXR1cm4gbWl4O1xuICAgICAgICBpZiAocCAmJiB0eXBlb2YgbWl4W3BdID09PSAnc3RyaW5nJykgcmV0dXJuIG1peFtwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGpvaW5lZFBhdGggPSBwYXRocy5zbGljZShpICsgaikuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgaWYgKGpvaW5lZFBhdGgpIHJldHVybiBkZWVwRmluZChtaXgsIGpvaW5lZFBhdGgsIGtleVNlcGFyYXRvcik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhzW2ldXTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuXG52YXIgUmVzb3VyY2VTdG9yZSA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhSZXNvdXJjZVN0b3JlLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlc291cmNlU3RvcmUpO1xuXG4gIGZ1bmN0aW9uIFJlc291cmNlU3RvcmUoZGF0YSkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICBuczogWyd0cmFuc2xhdGlvbiddLFxuICAgICAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nXG4gICAgfTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZXNvdXJjZVN0b3JlKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMuZGF0YSA9IGRhdGEgfHwge307XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhSZXNvdXJjZVN0b3JlLCBbe1xuICAgIGtleTogXCJhZGROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZE5hbWVzcGFjZXMobnMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucykgPCAwKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ucy5wdXNoKG5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VzKG5zKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucyk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShsbmcsIG5zLCBrZXkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcbiAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5rZXlTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO1xuICAgICAgdmFyIGlnbm9yZUpTT05TdHJ1Y3R1cmUgPSBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZSA6IHRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlO1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5KTtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHBhdGggPSBwYXRoLmNvbmNhdChrZXlTZXBhcmF0b3IgPyBrZXkuc3BsaXQoa2V5U2VwYXJhdG9yKSA6IGtleSk7XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgpO1xuICAgICAgaWYgKHJlc3VsdCB8fCAhaWdub3JlSlNPTlN0cnVjdHVyZSB8fCB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdDtcbiAgICAgIHJldHVybiBkZWVwRmluZCh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW2xuZ10gJiYgdGhpcy5kYXRhW2xuZ11bbnNdLCBrZXksIGtleVNlcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlKGxuZywgbnMsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIGlmIChrZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkga2V5U2VwYXJhdG9yID0gJy4nO1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAoa2V5KSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFsdWUgPSBucztcbiAgICAgICAgbnMgPSBwYXRoWzFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuICAgICAgc2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlcyhsbmcsIG5zLCByZXNvdXJjZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIG0gaW4gcmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2VzW21dID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHJlc291cmNlc1ttXSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHRoaXMuYWRkUmVzb3VyY2UobG5nLCBucywgbSwgcmVzb3VyY2VzW21dLCB7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmVzb3VyY2VCdW5kbGUobG5nLCBucywgcmVzb3VyY2VzLCBkZWVwLCBvdmVyd3JpdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgcGF0aCA9IFtsbmcsIG5zXTtcblxuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIGRlZXAgPSByZXNvdXJjZXM7XG4gICAgICAgIHJlc291cmNlcyA9IG5zO1xuICAgICAgICBucyA9IHBhdGhbMV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG4gICAgICB2YXIgcGFjayA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKSB8fCB7fTtcblxuICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgZGVlcEV4dGVuZChwYWNrLCByZXNvdXJjZXMsIG92ZXJ3cml0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWNrID0gX29iamVjdFNwcmVhZCQxKF9vYmplY3RTcHJlYWQkMSh7fSwgcGFjayksIHJlc291cmNlcyk7XG4gICAgICB9XG5cbiAgICAgIHNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCBwYWNrKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMuZW1pdCgnYWRkZWQnLCBsbmcsIG5zLCByZXNvdXJjZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAodGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2xuZ11bbnNdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZU5hbWVzcGFjZXMobnMpO1xuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVkJywgbG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1Jlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKGxuZywgbnMpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLmRlZmF1bHROUztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSA9PT0gJ3YxJykgcmV0dXJuIF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIHt9KSwgdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhW2xuZ107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMobG5nKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKTtcbiAgICAgIHZhciBuID0gZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKSB8fCBbXTtcbiAgICAgIHJldHVybiAhIW4uZmluZChmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZGF0YVt2XSAmJiBPYmplY3Qua2V5cyhkYXRhW3ZdKS5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSZXNvdXJjZVN0b3JlO1xufShFdmVudEVtaXR0ZXIpO1xuXG52YXIgcG9zdFByb2Nlc3NvciA9IHtcbiAgcHJvY2Vzc29yczoge30sXG4gIGFkZFBvc3RQcm9jZXNzb3I6IGZ1bmN0aW9uIGFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKSB7XG4gICAgdGhpcy5wcm9jZXNzb3JzW21vZHVsZS5uYW1lXSA9IG1vZHVsZTtcbiAgfSxcbiAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUocHJvY2Vzc29ycywgdmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBwcm9jZXNzb3JzLmZvckVhY2goZnVuY3Rpb24gKHByb2Nlc3Nvcikge1xuICAgICAgaWYgKF90aGlzLnByb2Nlc3NvcnNbcHJvY2Vzc29yXSkgdmFsdWUgPSBfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0ucHJvY2Vzcyh2YWx1ZSwga2V5LCBvcHRpb25zLCB0cmFuc2xhdG9yKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG93bktleXMkMihvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkMih0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDIoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQyKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMShEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQxKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQxKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cbnZhciBjaGVja2VkTG9hZGVkRm9yID0ge307XG5cbnZhciBUcmFuc2xhdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKFRyYW5zbGF0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMShUcmFuc2xhdG9yKTtcblxuICBmdW5jdGlvbiBUcmFuc2xhdG9yKHNlcnZpY2VzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zbGF0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICB9XG5cbiAgICBjb3B5KFsncmVzb3VyY2VTdG9yZScsICdsYW5ndWFnZVV0aWxzJywgJ3BsdXJhbFJlc29sdmVyJywgJ2ludGVycG9sYXRvcicsICdiYWNrZW5kQ29ubmVjdG9yJywgJ2kxOG5Gb3JtYXQnLCAndXRpbHMnXSwgc2VydmljZXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG5cbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgndHJhbnNsYXRvcicpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUcmFuc2xhdG9yLCBbe1xuICAgIGtleTogXCJjaGFuZ2VMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcpIHtcbiAgICAgIGlmIChsbmcpIHRoaXMubGFuZ3VhZ2UgPSBsbmc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImV4aXN0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleGlzdHMoa2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBpbnRlcnBvbGF0aW9uOiB7fVxuICAgICAgfTtcblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXksIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkICYmIHJlc29sdmVkLnJlcyAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRyYWN0RnJvbUtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0RnJvbUtleShrZXksIG9wdGlvbnMpIHtcbiAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICBpZiAobnNTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgbnNTZXBhcmF0b3IgPSAnOic7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBuYW1lc3BhY2VzID0gb3B0aW9ucy5ucyB8fCB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TIHx8IFtdO1xuICAgICAgdmFyIHdvdWxkQ2hlY2tGb3JOc0luS2V5ID0gbnNTZXBhcmF0b3IgJiYga2V5LmluZGV4T2YobnNTZXBhcmF0b3IpID4gLTE7XG4gICAgICB2YXIgc2VlbXNOYXR1cmFsTGFuZ3VhZ2UgPSAhdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yICYmICFvcHRpb25zLmtleVNlcGFyYXRvciAmJiAhdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3IgJiYgIW9wdGlvbnMubnNTZXBhcmF0b3IgJiYgIWxvb2tzTGlrZU9iamVjdFBhdGgoa2V5LCBuc1NlcGFyYXRvciwga2V5U2VwYXJhdG9yKTtcblxuICAgICAgaWYgKHdvdWxkQ2hlY2tGb3JOc0luS2V5ICYmICFzZWVtc05hdHVyYWxMYW5ndWFnZSkge1xuICAgICAgICB2YXIgbSA9IGtleS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcblxuICAgICAgICBpZiAobSAmJiBtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJ0cyA9IGtleS5zcGxpdChuc1NlcGFyYXRvcik7XG4gICAgICAgIGlmIChuc1NlcGFyYXRvciAhPT0ga2V5U2VwYXJhdG9yIHx8IG5zU2VwYXJhdG9yID09PSBrZXlTZXBhcmF0b3IgJiYgdGhpcy5vcHRpb25zLm5zLmluZGV4T2YocGFydHNbMF0pID4gLTEpIG5hbWVzcGFjZXMgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICBrZXkgPSBwYXJ0cy5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycpIG5hbWVzcGFjZXMgPSBbbmFtZXNwYWNlc107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidHJhbnNsYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRyYW5zbGF0ZShrZXlzLCBvcHRpb25zLCBsYXN0S2V5KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKF90eXBlb2Yob3B0aW9ucykgIT09ICdvYmplY3QnICYmIHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcikge1xuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKGtleXMgPT09IHVuZGVmaW5lZCB8fCBrZXlzID09PSBudWxsKSByZXR1cm4gJyc7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5cykpIGtleXMgPSBbU3RyaW5nKGtleXMpXTtcbiAgICAgIHZhciByZXR1cm5EZXRhaWxzID0gb3B0aW9ucy5yZXR1cm5EZXRhaWxzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnJldHVybkRldGFpbHMgOiB0aGlzLm9wdGlvbnMucmV0dXJuRGV0YWlscztcbiAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5rZXlTZXBhcmF0b3IgOiB0aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO1xuXG4gICAgICB2YXIgX3RoaXMkZXh0cmFjdEZyb21LZXkgPSB0aGlzLmV4dHJhY3RGcm9tS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSwgb3B0aW9ucyksXG4gICAgICAgICAga2V5ID0gX3RoaXMkZXh0cmFjdEZyb21LZXkua2V5LFxuICAgICAgICAgIG5hbWVzcGFjZXMgPSBfdGhpcyRleHRyYWN0RnJvbUtleS5uYW1lc3BhY2VzO1xuXG4gICAgICB2YXIgbmFtZXNwYWNlID0gbmFtZXNwYWNlc1tuYW1lc3BhY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIGxuZyA9IG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2U7XG4gICAgICB2YXIgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUgPSBvcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlIHx8IHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZTtcblxuICAgICAgaWYgKGxuZyAmJiBsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHtcbiAgICAgICAgaWYgKGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlKSB7XG4gICAgICAgICAgdmFyIG5zU2VwYXJhdG9yID0gb3B0aW9ucy5uc1NlcGFyYXRvciB8fCB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG5cbiAgICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgICAgcmVzb2x2ZWQucmVzID0gXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChuYW1lc3BhY2UpLmNvbmNhdChuc1NlcGFyYXRvcikuY29uY2F0KGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgIHJlc29sdmVkLnJlcyA9IGtleTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5cywgb3B0aW9ucyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQucmVzO1xuICAgICAgdmFyIHJlc1VzZWRLZXkgPSByZXNvbHZlZCAmJiByZXNvbHZlZC51c2VkS2V5IHx8IGtleTtcbiAgICAgIHZhciByZXNFeGFjdFVzZWRLZXkgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5leGFjdFVzZWRLZXkgfHwga2V5O1xuICAgICAgdmFyIHJlc1R5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHJlcyk7XG4gICAgICB2YXIgbm9PYmplY3QgPSBbJ1tvYmplY3QgTnVtYmVyXScsICdbb2JqZWN0IEZ1bmN0aW9uXScsICdbb2JqZWN0IFJlZ0V4cF0nXTtcbiAgICAgIHZhciBqb2luQXJyYXlzID0gb3B0aW9ucy5qb2luQXJyYXlzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmpvaW5BcnJheXMgOiB0aGlzLm9wdGlvbnMuam9pbkFycmF5cztcbiAgICAgIHZhciBoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCA9ICF0aGlzLmkxOG5Gb3JtYXQgfHwgdGhpcy5pMThuRm9ybWF0LmhhbmRsZUFzT2JqZWN0O1xuICAgICAgdmFyIGhhbmRsZUFzT2JqZWN0ID0gdHlwZW9mIHJlcyAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHJlcyAhPT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiByZXMgIT09ICdudW1iZXInO1xuXG4gICAgICBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgcmVzICYmIGhhbmRsZUFzT2JqZWN0ICYmIG5vT2JqZWN0LmluZGV4T2YocmVzVHlwZSkgPCAwICYmICEodHlwZW9mIGpvaW5BcnJheXMgPT09ICdzdHJpbmcnICYmIHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5yZXR1cm5PYmplY3RzICYmICF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cykge1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHIgPSB0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyID8gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihyZXNVc2VkS2V5LCByZXMsIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgbnM6IG5hbWVzcGFjZXNcbiAgICAgICAgICB9KSkgOiBcImtleSAnXCIuY29uY2F0KGtleSwgXCIgKFwiKS5jb25jYXQodGhpcy5sYW5ndWFnZSwgXCIpJyByZXR1cm5lZCBhbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuXCIpO1xuXG4gICAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJlc29sdmVkLnJlcyA9IHI7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5U2VwYXJhdG9yKSB7XG4gICAgICAgICAgdmFyIHJlc1R5cGVJc0FycmF5ID0gcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgICB2YXIgY29weSA9IHJlc1R5cGVJc0FycmF5ID8gW10gOiB7fTtcbiAgICAgICAgICB2YXIgbmV3S2V5VG9Vc2UgPSByZXNUeXBlSXNBcnJheSA/IHJlc0V4YWN0VXNlZEtleSA6IHJlc1VzZWRLZXk7XG5cbiAgICAgICAgICBmb3IgKHZhciBtIGluIHJlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsIG0pKSB7XG4gICAgICAgICAgICAgIHZhciBkZWVwS2V5ID0gXCJcIi5jb25jYXQobmV3S2V5VG9Vc2UpLmNvbmNhdChrZXlTZXBhcmF0b3IpLmNvbmNhdChtKTtcbiAgICAgICAgICAgICAgY29weVttXSA9IHRoaXMudHJhbnNsYXRlKGRlZXBLZXksIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7XG4gICAgICAgICAgICAgICAgam9pbkFycmF5czogZmFsc2UsXG4gICAgICAgICAgICAgICAgbnM6IG5hbWVzcGFjZXNcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAoY29weVttXSA9PT0gZGVlcEtleSkgY29weVttXSA9IHJlc1ttXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXMgPSBjb3B5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb2luKGpvaW5BcnJheXMpO1xuICAgICAgICBpZiAocmVzKSByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucywgbGFzdEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdXNlZERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHVzZWRLZXkgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gVHJhbnNsYXRvci5oYXNEZWZhdWx0VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVTdWZmaXggPSBuZWVkc1BsdXJhbEhhbmRsaW5nID8gdGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobG5nLCBvcHRpb25zLmNvdW50LCBvcHRpb25zKSA6ICcnO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChkZWZhdWx0VmFsdWVTdWZmaXgpXSB8fCBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpICYmIGhhc0RlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIHVzZWREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZExvb2t1cChyZXMpKSB7XG4gICAgICAgICAgdXNlZEtleSA9IHRydWU7XG4gICAgICAgICAgcmVzID0ga2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSA9IG9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5IHx8IHRoaXMub3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXk7XG4gICAgICAgIHZhciByZXNGb3JNaXNzaW5nID0gbWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5ICYmIHVzZWRLZXkgPyB1bmRlZmluZWQgOiByZXM7XG4gICAgICAgIHZhciB1cGRhdGVNaXNzaW5nID0gaGFzRGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZSAhPT0gcmVzICYmIHRoaXMub3B0aW9ucy51cGRhdGVNaXNzaW5nO1xuXG4gICAgICAgIGlmICh1c2VkS2V5IHx8IHVzZWREZWZhdWx0IHx8IHVwZGF0ZU1pc3NpbmcpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5sb2codXBkYXRlTWlzc2luZyA/ICd1cGRhdGVLZXknIDogJ21pc3NpbmdLZXknLCBsbmcsIG5hbWVzcGFjZSwga2V5LCB1cGRhdGVNaXNzaW5nID8gZGVmYXVsdFZhbHVlIDogcmVzKTtcblxuICAgICAgICAgIGlmIChrZXlTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBmayA9IHRoaXMucmVzb2x2ZShrZXksIF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgICBrZXlTZXBhcmF0b3I6IGZhbHNlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAoZmsgJiYgZmsucmVzKSB0aGlzLmxvZ2dlci53YXJuKCdTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGxuZ3MgPSBbXTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tMbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2ZhbGxiYWNrJyAmJiBmYWxsYmFja0xuZ3MgJiYgZmFsbGJhY2tMbmdzWzBdKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGxiYWNrTG5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBsbmdzLnB1c2goZmFsbGJhY2tMbmdzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1RvID09PSAnYWxsJykge1xuICAgICAgICAgICAgbG5ncyA9IHRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxuZ3MucHVzaChvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uIHNlbmQobCwgaywgc3BlY2lmaWNEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0Rm9yTWlzc2luZyA9IGhhc0RlZmF1bHRWYWx1ZSAmJiBzcGVjaWZpY0RlZmF1bHRWYWx1ZSAhPT0gcmVzID8gc3BlY2lmaWNEZWZhdWx0VmFsdWUgOiByZXNGb3JNaXNzaW5nO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIobCwgbmFtZXNwYWNlLCBrLCBkZWZhdWx0Rm9yTWlzc2luZywgdXBkYXRlTWlzc2luZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yICYmIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGwsIG5hbWVzcGFjZSwgaywgZGVmYXVsdEZvck1pc3NpbmcsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfdGhpczIuZW1pdCgnbWlzc2luZ0tleScsIGwsIG5hbWVzcGFjZSwgaywgcmVzKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlTWlzc2luZ1BsdXJhbHMgJiYgbmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeGVzKGxhbmd1YWdlLCBvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgIHNlbmQoW2xhbmd1YWdlXSwga2V5ICsgc3VmZml4LCBvcHRpb25zW1wiZGVmYXVsdFZhbHVlXCIuY29uY2F0KHN1ZmZpeCldIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VuZChsbmdzLCBrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzID0gdGhpcy5leHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleXMsIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KTtcbiAgICAgICAgaWYgKHVzZWRLZXkgJiYgcmVzID09PSBrZXkgJiYgdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSkgcmVzID0gXCJcIi5jb25jYXQobmFtZXNwYWNlLCBcIjpcIikuY29uY2F0KGtleSk7XG5cbiAgICAgICAgaWYgKCh1c2VkS2V5IHx8IHVzZWREZWZhdWx0KSAmJiB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcikge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSAhPT0gJ3YxJykge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIodGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSA/IFwiXCIuY29uY2F0KG5hbWVzcGFjZSwgXCI6XCIpLmNvbmNhdChrZXkpIDoga2V5LCB1c2VkRGVmYXVsdCA/IHJlcyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmVkLnJlcyA9IHJlcztcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRlbmRUcmFuc2xhdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleSwgb3B0aW9ucywgcmVzb2x2ZWQsIGxhc3RLZXkpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5wYXJzZSkge1xuICAgICAgICByZXMgPSB0aGlzLmkxOG5Gb3JtYXQucGFyc2UocmVzLCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSwgb3B0aW9ucyksIHJlc29sdmVkLnVzZWRMbmcsIHJlc29sdmVkLnVzZWROUywgcmVzb2x2ZWQudXNlZEtleSwge1xuICAgICAgICAgIHJlc29sdmVkOiByZXNvbHZlZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuc2tpcEludGVycG9sYXRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgdGhpcy5pbnRlcnBvbGF0b3IuaW5pdChfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge1xuICAgICAgICAgIGludGVycG9sYXRpb246IF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uKSwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uKVxuICAgICAgICB9KSk7XG4gICAgICAgIHZhciBza2lwT25WYXJpYWJsZXMgPSB0eXBlb2YgcmVzID09PSAnc3RyaW5nJyAmJiAob3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyk7XG4gICAgICAgIHZhciBuZXN0QmVmO1xuXG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmIgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgbmVzdEJlZiA9IG5iICYmIG5iLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5yZXBsYWNlICYmIHR5cGVvZiBvcHRpb25zLnJlcGxhY2UgIT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBsYWNlIDogb3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpIGRhdGEgPSBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSwgZGF0YSk7XG4gICAgICAgIHJlcyA9IHRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHJlcywgZGF0YSwgb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgIHZhciBuYSA9IHJlcy5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcbiAgICAgICAgICB2YXIgbmVzdEFmdCA9IG5hICYmIG5hLmxlbmd0aDtcbiAgICAgICAgICBpZiAobmVzdEJlZiA8IG5lc3RBZnQpIG9wdGlvbnMubmVzdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubmVzdCAhPT0gZmFsc2UpIHJlcyA9IHRoaXMuaW50ZXJwb2xhdG9yLm5lc3QocmVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsYXN0S2V5ICYmIGxhc3RLZXlbMF0gPT09IGFyZ3NbMF0gJiYgIW9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgX3RoaXMzLmxvZ2dlci53YXJuKFwiSXQgc2VlbXMgeW91IGFyZSBuZXN0aW5nIHJlY3Vyc2l2ZWx5IGtleTogXCIuY29uY2F0KGFyZ3NbMF0sIFwiIGluIGtleTogXCIpLmNvbmNhdChrZXlbMF0pKTtcblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMy50cmFuc2xhdGUuYXBwbHkoX3RoaXMzLCBhcmdzLmNvbmNhdChba2V5XSkpO1xuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJwb2xhdGlvbikgdGhpcy5pbnRlcnBvbGF0b3IucmVzZXQoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc3RQcm9jZXNzID0gb3B0aW9ucy5wb3N0UHJvY2VzcyB8fCB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3M7XG4gICAgICB2YXIgcG9zdFByb2Nlc3Nvck5hbWVzID0gdHlwZW9mIHBvc3RQcm9jZXNzID09PSAnc3RyaW5nJyA/IFtwb3N0UHJvY2Vzc10gOiBwb3N0UHJvY2VzcztcblxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkICYmIHJlcyAhPT0gbnVsbCAmJiBwb3N0UHJvY2Vzc29yTmFtZXMgJiYgcG9zdFByb2Nlc3Nvck5hbWVzLmxlbmd0aCAmJiBvcHRpb25zLmFwcGx5UG9zdFByb2Nlc3NvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgcmVzID0gcG9zdFByb2Nlc3Nvci5oYW5kbGUocG9zdFByb2Nlc3Nvck5hbWVzLCByZXMsIGtleSwgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZCA/IF9vYmplY3RTcHJlYWQkMih7XG4gICAgICAgICAgaTE4blJlc29sdmVkOiByZXNvbHZlZFxuICAgICAgICB9LCBvcHRpb25zKSA6IG9wdGlvbnMsIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZXNvbHZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc29sdmUoa2V5cykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIHZhciB1c2VkS2V5O1xuICAgICAgdmFyIGV4YWN0VXNlZEtleTtcbiAgICAgIHZhciB1c2VkTG5nO1xuICAgICAgdmFyIHVzZWROUztcbiAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBleHRyYWN0ZWQgPSBfdGhpczQuZXh0cmFjdEZyb21LZXkoaywgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIGtleSA9IGV4dHJhY3RlZC5rZXk7XG4gICAgICAgIHVzZWRLZXkgPSBrZXk7XG4gICAgICAgIHZhciBuYW1lc3BhY2VzID0gZXh0cmFjdGVkLm5hbWVzcGFjZXM7XG4gICAgICAgIGlmIChfdGhpczQub3B0aW9ucy5mYWxsYmFja05TKSBuYW1lc3BhY2VzID0gbmFtZXNwYWNlcy5jb25jYXQoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUyk7XG4gICAgICAgIHZhciBuZWVkc1BsdXJhbEhhbmRsaW5nID0gb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNvdW50ICE9PSAnc3RyaW5nJztcblxuICAgICAgICB2YXIgbmVlZHNaZXJvU3VmZml4TG9va3VwID0gbmVlZHNQbHVyYWxIYW5kbGluZyAmJiAhb3B0aW9ucy5vcmRpbmFsICYmIG9wdGlvbnMuY291bnQgPT09IDAgJiYgX3RoaXM0LnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKTtcblxuICAgICAgICB2YXIgbmVlZHNDb250ZXh0SGFuZGxpbmcgPSBvcHRpb25zLmNvbnRleHQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ251bWJlcicpICYmIG9wdGlvbnMuY29udGV4dCAhPT0gJyc7XG4gICAgICAgIHZhciBjb2RlcyA9IG9wdGlvbnMubG5ncyA/IG9wdGlvbnMubG5ncyA6IF90aGlzNC5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShvcHRpb25zLmxuZyB8fCBfdGhpczQubGFuZ3VhZ2UsIG9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICBuYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgICAgIHVzZWROUyA9IG5zO1xuXG4gICAgICAgICAgaWYgKCFjaGVja2VkTG9hZGVkRm9yW1wiXCIuY29uY2F0KGNvZGVzWzBdLCBcIi1cIikuY29uY2F0KG5zKV0gJiYgX3RoaXM0LnV0aWxzICYmIF90aGlzNC51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UgJiYgIV90aGlzNC51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UodXNlZE5TKSkge1xuICAgICAgICAgICAgY2hlY2tlZExvYWRlZEZvcltcIlwiLmNvbmNhdChjb2Rlc1swXSwgXCItXCIpLmNvbmNhdChucyldID0gdHJ1ZTtcblxuICAgICAgICAgICAgX3RoaXM0LmxvZ2dlci53YXJuKFwia2V5IFxcXCJcIi5jb25jYXQodXNlZEtleSwgXCJcXFwiIGZvciBsYW5ndWFnZXMgXFxcIlwiKS5jb25jYXQoY29kZXMuam9pbignLCAnKSwgXCJcXFwiIHdvbid0IGdldCByZXNvbHZlZCBhcyBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQodXNlZE5TLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgICAgICAgdXNlZExuZyA9IGNvZGU7XG4gICAgICAgICAgICB2YXIgZmluYWxLZXlzID0gW2tleV07XG5cbiAgICAgICAgICAgIGlmIChfdGhpczQuaTE4bkZvcm1hdCAmJiBfdGhpczQuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMoZmluYWxLZXlzLCBrZXksIGNvZGUsIG5zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBwbHVyYWxTdWZmaXg7XG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSBwbHVyYWxTdWZmaXggPSBfdGhpczQucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KGNvZGUsIG9wdGlvbnMuY291bnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YXIgemVyb1N1ZmZpeCA9IFwiXCIuY29uY2F0KF90aGlzNC5vcHRpb25zLnBsdXJhbFNlcGFyYXRvciwgXCJ6ZXJvXCIpO1xuXG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goa2V5ICsgcGx1cmFsU3VmZml4KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZWVkc1plcm9TdWZmaXhMb29rdXApIHtcbiAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGtleSArIHplcm9TdWZmaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChuZWVkc0NvbnRleHRIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0S2V5ID0gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoX3RoaXM0Lm9wdGlvbnMuY29udGV4dFNlcGFyYXRvcikuY29uY2F0KG9wdGlvbnMuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSArIHBsdXJhbFN1ZmZpeCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZWVkc1plcm9TdWZmaXhMb29rdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSArIHplcm9TdWZmaXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcG9zc2libGVLZXk7XG5cbiAgICAgICAgICAgIHdoaWxlIChwb3NzaWJsZUtleSA9IGZpbmFsS2V5cy5wb3AoKSkge1xuICAgICAgICAgICAgICBpZiAoIV90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkge1xuICAgICAgICAgICAgICAgIGV4YWN0VXNlZEtleSA9IHBvc3NpYmxlS2V5O1xuICAgICAgICAgICAgICAgIGZvdW5kID0gX3RoaXM0LmdldFJlc291cmNlKGNvZGUsIG5zLCBwb3NzaWJsZUtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlczogZm91bmQsXG4gICAgICAgIHVzZWRLZXk6IHVzZWRLZXksXG4gICAgICAgIGV4YWN0VXNlZEtleTogZXhhY3RVc2VkS2V5LFxuICAgICAgICB1c2VkTG5nOiB1c2VkTG5nLFxuICAgICAgICB1c2VkTlM6IHVzZWROU1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNWYWxpZExvb2t1cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkTG9va3VwKHJlcykge1xuICAgICAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsICYmIHJlcyA9PT0gbnVsbCkgJiYgISghdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nICYmIHJlcyA9PT0gJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShjb2RlLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZSkgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiaGFzRGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0RlZmF1bHRWYWx1ZShvcHRpb25zKSB7XG4gICAgICB2YXIgcHJlZml4ID0gJ2RlZmF1bHRWYWx1ZSc7XG5cbiAgICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgb3B0aW9uKSAmJiBwcmVmaXggPT09IG9wdGlvbi5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgJiYgdW5kZWZpbmVkICE9PSBvcHRpb25zW29wdGlvbl0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zbGF0b3I7XG59KEV2ZW50RW1pdHRlcik7XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5cbnZhciBMYW5ndWFnZVV0aWwgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExhbmd1YWdlVXRpbChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExhbmd1YWdlVXRpbCk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3VwcG9ydGVkTG5ncyA9IHRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzIHx8IGZhbHNlO1xuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2xhbmd1YWdlVXRpbHMnKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMYW5ndWFnZVV0aWwsIFt7XG4gICAga2V5OiBcImdldFNjcmlwdFBhcnRGcm9tQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIGlmIChwLmxlbmd0aCA9PT0gMikgcmV0dXJuIG51bGw7XG4gICAgICBwLnBvcCgpO1xuICAgICAgaWYgKHBbcC5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHAuam9pbignLScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIGNvZGU7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwWzBdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0TGFuZ3VhZ2VDb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgdmFyIHNwZWNpYWxDYXNlcyA9IFsnaGFucycsICdoYW50JywgJ2xhdG4nLCAnY3lybCcsICdjYW5zJywgJ21vbmcnLCAnYXJhYiddO1xuICAgICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZykge1xuICAgICAgICAgIHAgPSBwLm1hcChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcFsxXSA9IHBbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHAubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgcFswXSA9IHBbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAocFsxXS5sZW5ndGggPT09IDIpIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMF0gIT09ICdzZ24nICYmIHBbMl0ubGVuZ3RoID09PSAyKSBwWzJdID0gcFsyXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzFdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMV0gPSBjYXBpdGFsaXplKHBbMV0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMl0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsyXSA9IGNhcGl0YWxpemUocFsyXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwLmpvaW4oJy0nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGUgfHwgdGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZyA/IGNvZGUudG9Mb3dlckNhc2UoKSA6IGNvZGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU3VwcG9ydGVkQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZENvZGUoY29kZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkID09PSAnbGFuZ3VhZ2VPbmx5JyB8fCB0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIXRoaXMuc3VwcG9ydGVkTG5ncyB8fCAhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aCB8fCB0aGlzLnN1cHBvcnRlZExuZ3MuaW5kZXhPZihjb2RlKSA+IC0xO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRCZXN0TWF0Y2hGcm9tQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKGNvZGVzKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIWNvZGVzKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGNsZWFuZWRMbmcgPSBfdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgX3RoaXMuaXNTdXBwb3J0ZWRDb2RlKGNsZWFuZWRMbmcpKSBmb3VuZCA9IGNsZWFuZWRMbmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFmb3VuZCAmJiB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgICAgaWYgKGZvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICB2YXIgbG5nT25seSA9IF90aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLmlzU3VwcG9ydGVkQ29kZShsbmdPbmx5KSkgcmV0dXJuIGZvdW5kID0gbG5nT25seTtcbiAgICAgICAgICBmb3VuZCA9IF90aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKGZ1bmN0aW9uIChzdXBwb3J0ZWRMbmcpIHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRMbmcuaW5kZXhPZihsbmdPbmx5KSA9PT0gMCkgcmV0dXJuIHN1cHBvcnRlZExuZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF07XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZhbGxiYWNrQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmFsbGJhY2tDb2RlcyhmYWxsYmFja3MsIGNvZGUpIHtcbiAgICAgIGlmICghZmFsbGJhY2tzKSByZXR1cm4gW107XG4gICAgICBpZiAodHlwZW9mIGZhbGxiYWNrcyA9PT0gJ2Z1bmN0aW9uJykgZmFsbGJhY2tzID0gZmFsbGJhY2tzKGNvZGUpO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdzdHJpbmcnKSBmYWxsYmFja3MgPSBbZmFsbGJhY2tzXTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGZhbGxiYWNrcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHJldHVybiBmYWxsYmFja3M7XG4gICAgICBpZiAoIWNvZGUpIHJldHVybiBmYWxsYmFja3NbXCJkZWZhdWx0XCJdIHx8IFtdO1xuICAgICAgdmFyIGZvdW5kID0gZmFsbGJhY2tzW2NvZGVdO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IGZhbGxiYWNrc1tcImRlZmF1bHRcIl07XG4gICAgICByZXR1cm4gZm91bmQgfHwgW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvUmVzb2x2ZUhpZXJhcmNoeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1Jlc29sdmVIaWVyYXJjaHkoY29kZSwgZmFsbGJhY2tDb2RlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGZhbGxiYWNrQ29kZXMgPSB0aGlzLmdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tDb2RlIHx8IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyB8fCBbXSwgY29kZSk7XG4gICAgICB2YXIgY29kZXMgPSBbXTtcblxuICAgICAgdmFyIGFkZENvZGUgPSBmdW5jdGlvbiBhZGRDb2RlKGMpIHtcbiAgICAgICAgaWYgKCFjKSByZXR1cm47XG5cbiAgICAgICAgaWYgKF90aGlzMi5pc1N1cHBvcnRlZENvZGUoYykpIHtcbiAgICAgICAgICBjb2Rlcy5wdXNoKGMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5sb2dnZXIud2FybihcInJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiBcIi5jb25jYXQoYykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnbGFuZ3VhZ2VPbmx5JykgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScgJiYgdGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdjdXJyZW50T25seScpIGFkZENvZGUodGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBhZGRDb2RlKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpKTtcbiAgICAgIH1cblxuICAgICAgZmFsbGJhY2tDb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChmYykge1xuICAgICAgICBpZiAoY29kZXMuaW5kZXhPZihmYykgPCAwKSBhZGRDb2RlKF90aGlzMi5mb3JtYXRMYW5ndWFnZUNvZGUoZmMpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvZGVzO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMYW5ndWFnZVV0aWw7XG59KCk7XG5cbnZhciBzZXRzID0gW3tcbiAgbG5nczogWydhY2gnLCAnYWsnLCAnYW0nLCAnYXJuJywgJ2JyJywgJ2ZpbCcsICdndW4nLCAnbG4nLCAnbWZlJywgJ21nJywgJ21pJywgJ29jJywgJ3B0JywgJ3B0LUJSJywgJ3RnJywgJ3RsJywgJ3RpJywgJ3RyJywgJ3V6JywgJ3dhJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxXG59LCB7XG4gIGxuZ3M6IFsnYWYnLCAnYW4nLCAnYXN0JywgJ2F6JywgJ2JnJywgJ2JuJywgJ2NhJywgJ2RhJywgJ2RlJywgJ2RldicsICdlbCcsICdlbicsICdlbycsICdlcycsICdldCcsICdldScsICdmaScsICdmbycsICdmdXInLCAnZnknLCAnZ2wnLCAnZ3UnLCAnaGEnLCAnaGknLCAnaHUnLCAnaHknLCAnaWEnLCAnaXQnLCAna2snLCAna24nLCAna3UnLCAnbGInLCAnbWFpJywgJ21sJywgJ21uJywgJ21yJywgJ25haCcsICduYXAnLCAnbmInLCAnbmUnLCAnbmwnLCAnbm4nLCAnbm8nLCAnbnNvJywgJ3BhJywgJ3BhcCcsICdwbXMnLCAncHMnLCAncHQtUFQnLCAncm0nLCAnc2NvJywgJ3NlJywgJ3NpJywgJ3NvJywgJ3NvbicsICdzcScsICdzdicsICdzdycsICd0YScsICd0ZScsICd0aycsICd1cicsICd5byddLFxuICBucjogWzEsIDJdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ2F5JywgJ2JvJywgJ2NnZycsICdmYScsICdodCcsICdpZCcsICdqYScsICdqYm8nLCAna2EnLCAna20nLCAna28nLCAna3knLCAnbG8nLCAnbXMnLCAnc2FoJywgJ3N1JywgJ3RoJywgJ3R0JywgJ3VnJywgJ3ZpJywgJ3dvJywgJ3poJ10sXG4gIG5yOiBbMV0sXG4gIGZjOiAzXG59LCB7XG4gIGxuZ3M6IFsnYmUnLCAnYnMnLCAnY25yJywgJ2R6JywgJ2hyJywgJ3J1JywgJ3NyJywgJ3VrJ10sXG4gIG5yOiBbMSwgMiwgNV0sXG4gIGZjOiA0XG59LCB7XG4gIGxuZ3M6IFsnYXInXSxcbiAgbnI6IFswLCAxLCAyLCAzLCAxMSwgMTAwXSxcbiAgZmM6IDVcbn0sIHtcbiAgbG5nczogWydjcycsICdzayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNlxufSwge1xuICBsbmdzOiBbJ2NzYicsICdwbCddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogN1xufSwge1xuICBsbmdzOiBbJ2N5J10sXG4gIG5yOiBbMSwgMiwgMywgOF0sXG4gIGZjOiA4XG59LCB7XG4gIGxuZ3M6IFsnZnInXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDlcbn0sIHtcbiAgbG5nczogWydnYSddLFxuICBucjogWzEsIDIsIDMsIDcsIDExXSxcbiAgZmM6IDEwXG59LCB7XG4gIGxuZ3M6IFsnZ2QnXSxcbiAgbnI6IFsxLCAyLCAzLCAyMF0sXG4gIGZjOiAxMVxufSwge1xuICBsbmdzOiBbJ2lzJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxMlxufSwge1xuICBsbmdzOiBbJ2p2J10sXG4gIG5yOiBbMCwgMV0sXG4gIGZjOiAxM1xufSwge1xuICBsbmdzOiBbJ2t3J10sXG4gIG5yOiBbMSwgMiwgMywgNF0sXG4gIGZjOiAxNFxufSwge1xuICBsbmdzOiBbJ2x0J10sXG4gIG5yOiBbMSwgMiwgMTBdLFxuICBmYzogMTVcbn0sIHtcbiAgbG5nczogWydsdiddLFxuICBucjogWzEsIDIsIDBdLFxuICBmYzogMTZcbn0sIHtcbiAgbG5nczogWydtayddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTdcbn0sIHtcbiAgbG5nczogWydtbmsnXSxcbiAgbnI6IFswLCAxLCAyXSxcbiAgZmM6IDE4XG59LCB7XG4gIGxuZ3M6IFsnbXQnXSxcbiAgbnI6IFsxLCAyLCAxMSwgMjBdLFxuICBmYzogMTlcbn0sIHtcbiAgbG5nczogWydvciddLFxuICBucjogWzIsIDFdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ3JvJ10sXG4gIG5yOiBbMSwgMiwgMjBdLFxuICBmYzogMjBcbn0sIHtcbiAgbG5nczogWydzbCddLFxuICBucjogWzUsIDEsIDIsIDNdLFxuICBmYzogMjFcbn0sIHtcbiAgbG5nczogWydoZScsICdpdyddLFxuICBucjogWzEsIDIsIDIwLCAyMV0sXG4gIGZjOiAyMlxufV07XG52YXIgX3J1bGVzUGx1cmFsc1R5cGVzID0ge1xuICAxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPiAxKTtcbiAgfSxcbiAgMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9IDEpO1xuICB9LFxuICAzOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgNDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDU6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiBuID09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1KTtcbiAgfSxcbiAgNjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA+PSAyICYmIG4gPD0gNCA/IDEgOiAyKTtcbiAgfSxcbiAgNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiAlIDEwID49IDIgJiYgbiAlIDEwIDw9IDQgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgODogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gIT0gOCAmJiBuICE9IDExID8gMiA6IDMpO1xuICB9LFxuICA5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPj0gMik7XG4gIH0sXG4gIDEwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA8IDcgPyAyIDogbiA8IDExID8gMyA6IDQpO1xuICB9LFxuICAxMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiA9PSAxMSA/IDAgOiBuID09IDIgfHwgbiA9PSAxMiA/IDEgOiBuID4gMiAmJiBuIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDEyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCAhPSAxIHx8IG4gJSAxMDAgPT0gMTEpO1xuICB9LFxuICAxMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9PSAwKTtcbiAgfSxcbiAgMTQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuID09IDMgPyAyIDogMyk7XG4gIH0sXG4gIDE1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAlIDEwID49IDIgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgMTY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICE9PSAwID8gMSA6IDIpO1xuICB9LFxuICAxNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiAxKTtcbiAgfSxcbiAgMTg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiAyKTtcbiAgfSxcbiAgMTk6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMSAmJiBuICUgMTAwIDwgMTEgPyAxIDogbiAlIDEwMCA+IDEwICYmIG4gJSAxMDAgPCAyMCA/IDIgOiAzKTtcbiAgfSxcbiAgMjA6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMCAmJiBuICUgMTAwIDwgMjAgPyAxIDogMik7XG4gIH0sXG4gIDIxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMDAgPT0gMSA/IDEgOiBuICUgMTAwID09IDIgPyAyIDogbiAlIDEwMCA9PSAzIHx8IG4gJSAxMDAgPT0gNCA/IDMgOiAwKTtcbiAgfSxcbiAgMjI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiAobiA8IDAgfHwgbiA+IDEwKSAmJiBuICUgMTAgPT0gMCA/IDIgOiAzKTtcbiAgfVxufTtcbnZhciBkZXByZWNhdGVkSnNvblZlcnNpb25zID0gWyd2MScsICd2MicsICd2MyddO1xudmFyIHN1ZmZpeGVzT3JkZXIgPSB7XG4gIHplcm86IDAsXG4gIG9uZTogMSxcbiAgdHdvOiAyLFxuICBmZXc6IDMsXG4gIG1hbnk6IDQsXG4gIG90aGVyOiA1XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSdWxlcygpIHtcbiAgdmFyIHJ1bGVzID0ge307XG4gIHNldHMuZm9yRWFjaChmdW5jdGlvbiAoc2V0KSB7XG4gICAgc2V0LmxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgcnVsZXNbbF0gPSB7XG4gICAgICAgIG51bWJlcnM6IHNldC5ucixcbiAgICAgICAgcGx1cmFsczogX3J1bGVzUGx1cmFsc1R5cGVzW3NldC5mY11cbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gcnVsZXM7XG59XG5cbnZhciBQbHVyYWxSZXNvbHZlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGx1cmFsUmVzb2x2ZXIobGFuZ3VhZ2VVdGlscykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQbHVyYWxSZXNvbHZlcik7XG5cbiAgICB0aGlzLmxhbmd1YWdlVXRpbHMgPSBsYW5ndWFnZVV0aWxzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgncGx1cmFsUmVzb2x2ZXInKTtcblxuICAgIGlmICgoIXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiB8fCB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPT09ICd2NCcpICYmICh0eXBlb2YgSW50bCA9PT0gJ3VuZGVmaW5lZCcgfHwgIUludGwuUGx1cmFsUnVsZXMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gPSAndjMnO1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1lvdXIgZW52aXJvbm1lbnQgc2VlbXMgbm90IHRvIGJlIEludGwgQVBJIGNvbXBhdGlibGUsIHVzZSBhbiBJbnRsLlBsdXJhbFJ1bGVzIHBvbHlmaWxsLiBXaWxsIGZhbGxiYWNrIHRvIHRoZSBjb21wYXRpYmlsaXR5SlNPTiB2MyBmb3JtYXQgaGFuZGxpbmcuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcyA9IGNyZWF0ZVJ1bGVzKCk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUGx1cmFsUmVzb2x2ZXIsIFt7XG4gICAga2V5OiBcImFkZFJ1bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUnVsZShsbmcsIG9iaikge1xuICAgICAgdGhpcy5ydWxlc1tsbmddID0gb2JqO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJ1bGUoY29kZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbmV3IEludGwuUGx1cmFsUnVsZXMoY29kZSwge1xuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5vcmRpbmFsID8gJ29yZGluYWwnIDogJ2NhcmRpbmFsJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ1bGVzW2NvZGVdIHx8IHRoaXMucnVsZXNbdGhpcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVlZHNQbHVyYWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmVlZHNQbHVyYWwoY29kZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICByZXR1cm4gcnVsZSAmJiBydWxlLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMubGVuZ3RoID4gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJ1bGUgJiYgcnVsZS5udW1iZXJzLmxlbmd0aCA+IDE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFBsdXJhbEZvcm1zT2ZLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGx1cmFsRm9ybXNPZktleShjb2RlLCBrZXkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1ZmZpeGVzKGNvZGUsIG9wdGlvbnMpLm1hcChmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChzdWZmaXgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeGVzKGNvZGUpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUucmVzb2x2ZWRPcHRpb25zKCkucGx1cmFsQ2F0ZWdvcmllcy5zb3J0KGZ1bmN0aW9uIChwbHVyYWxDYXRlZ29yeTEsIHBsdXJhbENhdGVnb3J5Mikge1xuICAgICAgICAgIHJldHVybiBzdWZmaXhlc09yZGVyW3BsdXJhbENhdGVnb3J5MV0gLSBzdWZmaXhlc09yZGVyW3BsdXJhbENhdGVnb3J5Ml07XG4gICAgICAgIH0pLm1hcChmdW5jdGlvbiAocGx1cmFsQ2F0ZWdvcnkpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoX3RoaXMub3B0aW9ucy5wcmVwZW5kKS5jb25jYXQocGx1cmFsQ2F0ZWdvcnkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJ1bGUubnVtYmVycy5tYXAoZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gX3RoaXMuZ2V0U3VmZml4KGNvZGUsIG51bWJlciwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeChjb2RlLCBjb3VudCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChydWxlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh0aGlzLm9wdGlvbnMucHJlcGVuZCkuY29uY2F0KHJ1bGUuc2VsZWN0KGNvdW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUocnVsZSwgY291bnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFwibm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiBcIi5jb25jYXQoY29kZSkpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHJ1bGUsIGNvdW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGlkeCA9IHJ1bGUubm9BYnMgPyBydWxlLnBsdXJhbHMoY291bnQpIDogcnVsZS5wbHVyYWxzKE1hdGguYWJzKGNvdW50KSk7XG4gICAgICB2YXIgc3VmZml4ID0gcnVsZS5udW1iZXJzW2lkeF07XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXggJiYgcnVsZS5udW1iZXJzLmxlbmd0aCA9PT0gMiAmJiBydWxlLm51bWJlcnNbMF0gPT09IDEpIHtcbiAgICAgICAgaWYgKHN1ZmZpeCA9PT0gMikge1xuICAgICAgICAgIHN1ZmZpeCA9ICdwbHVyYWwnO1xuICAgICAgICB9IGVsc2UgaWYgKHN1ZmZpeCA9PT0gMSkge1xuICAgICAgICAgIHN1ZmZpeCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciByZXR1cm5TdWZmaXggPSBmdW5jdGlvbiByZXR1cm5TdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5wcmVwZW5kICYmIHN1ZmZpeC50b1N0cmluZygpID8gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCArIHN1ZmZpeC50b1N0cmluZygpIDogc3VmZml4LnRvU3RyaW5nKCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjEnKSB7XG4gICAgICAgIGlmIChzdWZmaXggPT09IDEpIHJldHVybiAnJztcbiAgICAgICAgaWYgKHR5cGVvZiBzdWZmaXggPT09ICdudW1iZXInKSByZXR1cm4gXCJfcGx1cmFsX1wiLmNvbmNhdChzdWZmaXgudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjInKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4ICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDIgJiYgcnVsZS5udW1iZXJzWzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5TdWZmaXgoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wcmVwZW5kICYmIGlkeC50b1N0cmluZygpID8gdGhpcy5vcHRpb25zLnByZXBlbmQgKyBpZHgudG9TdHJpbmcoKSA6IGlkeC50b1N0cmluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG91bGRVc2VJbnRsQXBpXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVzZUludGxBcGkoKSB7XG4gICAgICByZXR1cm4gIWRlcHJlY2F0ZWRKc29uVmVyc2lvbnMuaW5jbHVkZXModGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUGx1cmFsUmVzb2x2ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkMyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkMyh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG52YXIgSW50ZXJwb2xhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBJbnRlcnBvbGF0b3IoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEludGVycG9sYXRvcik7XG5cbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdpbnRlcnBvbGF0b3InKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5mb3JtYXQgPSBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbml0KG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEludGVycG9sYXRvciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgaWYgKCFvcHRpb25zLmludGVycG9sYXRpb24pIG9wdGlvbnMuaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgZXNjYXBlVmFsdWU6IHRydWVcbiAgICAgIH07XG4gICAgICB2YXIgaU9wdHMgPSBvcHRpb25zLmludGVycG9sYXRpb247XG4gICAgICB0aGlzLmVzY2FwZSA9IGlPcHRzLmVzY2FwZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMuZXNjYXBlIDogZXNjYXBlO1xuICAgICAgdGhpcy5lc2NhcGVWYWx1ZSA9IGlPcHRzLmVzY2FwZVZhbHVlICE9PSB1bmRlZmluZWQgPyBpT3B0cy5lc2NhcGVWYWx1ZSA6IHRydWU7XG4gICAgICB0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgPSBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlICE9PSB1bmRlZmluZWQgPyBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlIDogZmFsc2U7XG4gICAgICB0aGlzLnByZWZpeCA9IGlPcHRzLnByZWZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLnByZWZpeCkgOiBpT3B0cy5wcmVmaXhFc2NhcGVkIHx8ICd7eyc7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGlPcHRzLnN1ZmZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLnN1ZmZpeCkgOiBpT3B0cy5zdWZmaXhFc2NhcGVkIHx8ICd9fSc7XG4gICAgICB0aGlzLmZvcm1hdFNlcGFyYXRvciA9IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA/IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA6IGlPcHRzLmZvcm1hdFNlcGFyYXRvciB8fCAnLCc7XG4gICAgICB0aGlzLnVuZXNjYXBlUHJlZml4ID0gaU9wdHMudW5lc2NhcGVTdWZmaXggPyAnJyA6IGlPcHRzLnVuZXNjYXBlUHJlZml4IHx8ICctJztcbiAgICAgIHRoaXMudW5lc2NhcGVTdWZmaXggPSB0aGlzLnVuZXNjYXBlUHJlZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVN1ZmZpeCB8fCAnJztcbiAgICAgIHRoaXMubmVzdGluZ1ByZWZpeCA9IGlPcHRzLm5lc3RpbmdQcmVmaXggPyByZWdleEVzY2FwZShpT3B0cy5uZXN0aW5nUHJlZml4KSA6IGlPcHRzLm5lc3RpbmdQcmVmaXhFc2NhcGVkIHx8IHJlZ2V4RXNjYXBlKCckdCgnKTtcbiAgICAgIHRoaXMubmVzdGluZ1N1ZmZpeCA9IGlPcHRzLm5lc3RpbmdTdWZmaXggPyByZWdleEVzY2FwZShpT3B0cy5uZXN0aW5nU3VmZml4KSA6IGlPcHRzLm5lc3RpbmdTdWZmaXhFc2NhcGVkIHx8IHJlZ2V4RXNjYXBlKCcpJyk7XG4gICAgICB0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yID0gaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgPyBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA6IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yIHx8ICcsJztcbiAgICAgIHRoaXMubWF4UmVwbGFjZXMgPSBpT3B0cy5tYXhSZXBsYWNlcyA/IGlPcHRzLm1heFJlcGxhY2VzIDogMTAwMDtcbiAgICAgIHRoaXMuYWx3YXlzRm9ybWF0ID0gaU9wdHMuYWx3YXlzRm9ybWF0ICE9PSB1bmRlZmluZWQgPyBpT3B0cy5hbHdheXNGb3JtYXQgOiBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zKSB0aGlzLmluaXQodGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRSZWdFeHBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRSZWdFeHAoKSB7XG4gICAgICB2YXIgcmVnZXhwU3RyID0gXCJcIi5jb25jYXQodGhpcy5wcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMuc3VmZml4KTtcbiAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHBTdHIsICdnJyk7XG4gICAgICB2YXIgcmVnZXhwVW5lc2NhcGVTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCkuY29uY2F0KHRoaXMudW5lc2NhcGVQcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMudW5lc2NhcGVTdWZmaXgpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7XG4gICAgICB0aGlzLnJlZ2V4cFVuZXNjYXBlID0gbmV3IFJlZ0V4cChyZWdleHBVbmVzY2FwZVN0ciwgJ2cnKTtcbiAgICAgIHZhciBuZXN0aW5nUmVnZXhwU3RyID0gXCJcIi5jb25jYXQodGhpcy5uZXN0aW5nUHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLm5lc3RpbmdTdWZmaXgpO1xuICAgICAgdGhpcy5uZXN0aW5nUmVnZXhwID0gbmV3IFJlZ0V4cChuZXN0aW5nUmVnZXhwU3RyLCAnZycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnRlcnBvbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdHIsIGRhdGEsIGxuZywgb3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgdmFyIHJlcGxhY2VzO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMgfHwge307XG5cbiAgICAgIGZ1bmN0aW9uIHJlZ2V4U2FmZSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZUZvcm1hdCA9IGZ1bmN0aW9uIGhhbmRsZUZvcm1hdChrZXkpIHtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKF90aGlzLmZvcm1hdFNlcGFyYXRvcikgPCAwKSB7XG4gICAgICAgICAgdmFyIHBhdGggPSBnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrZXkpO1xuICAgICAgICAgIHJldHVybiBfdGhpcy5hbHdheXNGb3JtYXQgPyBfdGhpcy5mb3JtYXQocGF0aCwgdW5kZWZpbmVkLCBsbmcsIF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKSwgZGF0YSksIHt9LCB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBrZXlcbiAgICAgICAgICB9KSkgOiBwYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHAgPSBrZXkuc3BsaXQoX3RoaXMuZm9ybWF0U2VwYXJhdG9yKTtcbiAgICAgICAgdmFyIGsgPSBwLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICB2YXIgZiA9IHAuam9pbihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIF90aGlzLmZvcm1hdChnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrKSwgZiwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IGtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5yZXNldFJlZ0V4cCgpO1xuICAgICAgdmFyIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgfHwgdGhpcy5vcHRpb25zLm1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjtcbiAgICAgIHZhciBza2lwT25WYXJpYWJsZXMgPSBvcHRpb25zICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiBvcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzIDogdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzO1xuICAgICAgdmFyIHRvZG9zID0gW3tcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXhwVW5lc2NhcGUsXG4gICAgICAgIHNhZmVWYWx1ZTogZnVuY3Rpb24gc2FmZVZhbHVlKHZhbCkge1xuICAgICAgICAgIHJldHVybiByZWdleFNhZmUodmFsKTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICByZWdleDogdGhpcy5yZWdleHAsXG4gICAgICAgIHNhZmVWYWx1ZTogZnVuY3Rpb24gc2FmZVZhbHVlKHZhbCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5lc2NhcGVWYWx1ZSA/IHJlZ2V4U2FmZShfdGhpcy5lc2NhcGUodmFsKSkgOiByZWdleFNhZmUodmFsKTtcbiAgICAgICAgfVxuICAgICAgfV07XG4gICAgICB0b2Rvcy5mb3JFYWNoKGZ1bmN0aW9uICh0b2RvKSB7XG4gICAgICAgIHJlcGxhY2VzID0gMDtcblxuICAgICAgICB3aGlsZSAobWF0Y2ggPSB0b2RvLnJlZ2V4LmV4ZWMoc3RyKSkge1xuICAgICAgICAgIHZhciBtYXRjaGVkVmFyID0gbWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICAgIHZhbHVlID0gaGFuZGxlRm9ybWF0KG1hdGNoZWRWYXIpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHZhciB0ZW1wID0gbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyKHN0ciwgbWF0Y2gsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB0ZW1wID09PSAnc3RyaW5nJyA/IHRlbXAgOiAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KG1hdGNoZWRWYXIpKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHBhc3MgaW4gdmFyaWFibGUgXCIuY29uY2F0KG1hdGNoZWRWYXIsIFwiIGZvciBpbnRlcnBvbGF0aW5nIFwiKS5jb25jYXQoc3RyKSk7XG5cbiAgICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIV90aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbWFrZVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHNhZmVWYWx1ZSA9IHRvZG8uc2FmZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgc2FmZVZhbHVlKTtcblxuICAgICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4ICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4IC09IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9kby5yZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcGxhY2VzKys7XG5cbiAgICAgICAgICBpZiAocmVwbGFjZXMgPj0gX3RoaXMubWF4UmVwbGFjZXMpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJuZXN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5lc3Qoc3RyLCBmYykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgdmFyIGNsb25lZE9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpO1xuXG4gICAgICBjbG9uZWRPcHRpb25zLmFwcGx5UG9zdFByb2Nlc3NvciA9IGZhbHNlO1xuICAgICAgZGVsZXRlIGNsb25lZE9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVIYXNPcHRpb25zKGtleSwgaW5oZXJpdGVkT3B0aW9ucykge1xuICAgICAgICB2YXIgc2VwID0gdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKHNlcCkgPCAwKSByZXR1cm4ga2V5O1xuICAgICAgICB2YXIgYyA9IGtleS5zcGxpdChuZXcgUmVnRXhwKFwiXCIuY29uY2F0KHNlcCwgXCJbIF0qe1wiKSkpO1xuICAgICAgICB2YXIgb3B0aW9uc1N0cmluZyA9IFwie1wiLmNvbmNhdChjWzFdKTtcbiAgICAgICAga2V5ID0gY1swXTtcbiAgICAgICAgb3B0aW9uc1N0cmluZyA9IHRoaXMuaW50ZXJwb2xhdGUob3B0aW9uc1N0cmluZywgY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9uZWRPcHRpb25zID0gSlNPTi5wYXJzZShvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgICBpZiAoaW5oZXJpdGVkT3B0aW9ucykgY2xvbmVkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIGluaGVyaXRlZE9wdGlvbnMpLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgXCIuY29uY2F0KGtleSksIGUpO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChzZXApLmNvbmNhdChvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBjbG9uZWRPcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG1hdGNoID0gdGhpcy5uZXN0aW5nUmVnZXhwLmV4ZWMoc3RyKSkge1xuICAgICAgICB2YXIgZm9ybWF0dGVycyA9IFtdO1xuICAgICAgICB2YXIgZG9SZWR1Y2UgPSBmYWxzZTtcblxuICAgICAgICBpZiAobWF0Y2hbMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikgIT09IC0xICYmICEvey4qfS8udGVzdChtYXRjaFsxXSkpIHtcbiAgICAgICAgICB2YXIgciA9IG1hdGNoWzFdLnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKS5tYXAoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLnRyaW0oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtYXRjaFsxXSA9IHIuc2hpZnQoKTtcbiAgICAgICAgICBmb3JtYXR0ZXJzID0gcjtcbiAgICAgICAgICBkb1JlZHVjZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IGZjKGhhbmRsZUhhc09wdGlvbnMuY2FsbCh0aGlzLCBtYXRjaFsxXS50cmltKCksIGNsb25lZE9wdGlvbnMpLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgaWYgKHZhbHVlICYmIG1hdGNoWzBdID09PSBzdHIgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSBtYWtlU3RyaW5nKHZhbHVlKTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byByZXNvbHZlIFwiLmNvbmNhdChtYXRjaFsxXSwgXCIgZm9yIG5lc3RpbmcgXCIpLmNvbmNhdChzdHIpKTtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvUmVkdWNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBmb3JtYXR0ZXJzLnJlZHVjZShmdW5jdGlvbiAodiwgZikge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5mb3JtYXQodiwgZiwgb3B0aW9ucy5sbmcsIF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBtYXRjaFsxXS50cmltKClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9LCB2YWx1ZS50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWdleHAubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSW50ZXJwb2xhdG9yO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDQob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNChPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gcGFyc2VGb3JtYXRTdHIoZm9ybWF0U3RyKSB7XG4gIHZhciBmb3JtYXROYW1lID0gZm9ybWF0U3RyLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB2YXIgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXG4gIGlmIChmb3JtYXRTdHIuaW5kZXhPZignKCcpID4gLTEpIHtcbiAgICB2YXIgcCA9IGZvcm1hdFN0ci5zcGxpdCgnKCcpO1xuICAgIGZvcm1hdE5hbWUgPSBwWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHZhciBvcHRTdHIgPSBwWzFdLnN1YnN0cmluZygwLCBwWzFdLmxlbmd0aCAtIDEpO1xuXG4gICAgaWYgKGZvcm1hdE5hbWUgPT09ICdjdXJyZW5jeScgJiYgb3B0U3RyLmluZGV4T2YoJzonKSA8IDApIHtcbiAgICAgIGlmICghZm9ybWF0T3B0aW9ucy5jdXJyZW5jeSkgZm9ybWF0T3B0aW9ucy5jdXJyZW5jeSA9IG9wdFN0ci50cmltKCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXROYW1lID09PSAncmVsYXRpdmV0aW1lJyAmJiBvcHRTdHIuaW5kZXhPZignOicpIDwgMCkge1xuICAgICAgaWYgKCFmb3JtYXRPcHRpb25zLnJhbmdlKSBmb3JtYXRPcHRpb25zLnJhbmdlID0gb3B0U3RyLnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9wdHMgPSBvcHRTdHIuc3BsaXQoJzsnKTtcbiAgICAgIG9wdHMuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIGlmICghb3B0KSByZXR1cm47XG5cbiAgICAgICAgdmFyIF9vcHQkc3BsaXQgPSBvcHQuc3BsaXQoJzonKSxcbiAgICAgICAgICAgIF9vcHQkc3BsaXQyID0gX3RvQXJyYXkoX29wdCRzcGxpdCksXG4gICAgICAgICAgICBrZXkgPSBfb3B0JHNwbGl0MlswXSxcbiAgICAgICAgICAgIHJlc3QgPSBfb3B0JHNwbGl0Mi5zbGljZSgxKTtcblxuICAgICAgICB2YXIgdmFsID0gcmVzdC5qb2luKCc6JykudHJpbSgpLnJlcGxhY2UoL14nK3wnKyQvZywgJycpO1xuICAgICAgICBpZiAoIWZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0pIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSB2YWw7XG4gICAgICAgIGlmICh2YWwgPT09ICdmYWxzZScpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSBmYWxzZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ3RydWUnKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc05hTih2YWwpKSBmb3JtYXRPcHRpb25zW2tleS50cmltKCldID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdE5hbWU6IGZvcm1hdE5hbWUsXG4gICAgZm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9uc1xuICB9O1xufVxuXG52YXIgRm9ybWF0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGb3JtYXR0ZXIoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvcm1hdHRlcik7XG5cbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdmb3JtYXR0ZXInKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZm9ybWF0cyA9IHtcbiAgICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHZhbCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG5nLCBvcHRpb25zKS5mb3JtYXQodmFsKTtcbiAgICAgIH0sXG4gICAgICBjdXJyZW5jeTogZnVuY3Rpb24gY3VycmVuY3kodmFsLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNChfb2JqZWN0U3ByZWFkJDQoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knXG4gICAgICAgIH0pKS5mb3JtYXQodmFsKTtcbiAgICAgIH0sXG4gICAgICBkYXRldGltZTogZnVuY3Rpb24gZGF0ZXRpbWUodmFsLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSkuZm9ybWF0KHZhbCk7XG4gICAgICB9LFxuICAgICAgcmVsYXRpdmV0aW1lOiBmdW5jdGlvbiByZWxhdGl2ZXRpbWUodmFsLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpLmZvcm1hdCh2YWwsIG9wdGlvbnMucmFuZ2UgfHwgJ2RheScpO1xuICAgICAgfSxcbiAgICAgIGxpc3Q6IGZ1bmN0aW9uIGxpc3QodmFsLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkxpc3RGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoe30sIG9wdGlvbnMpKS5mb3JtYXQodmFsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhGb3JtYXR0ZXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbjoge31cbiAgICAgIH07XG4gICAgICB2YXIgaU9wdHMgPSBvcHRpb25zLmludGVycG9sYXRpb247XG4gICAgICB0aGlzLmZvcm1hdFNlcGFyYXRvciA9IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA/IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA6IGlPcHRzLmZvcm1hdFNlcGFyYXRvciB8fCAnLCc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQobmFtZSwgZmMpIHtcbiAgICAgIHRoaXMuZm9ybWF0c1tuYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA9IGZjO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBfZm9ybWF0LCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBmb3JtYXRzID0gX2Zvcm1hdC5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcik7XG5cbiAgICAgIHZhciByZXN1bHQgPSBmb3JtYXRzLnJlZHVjZShmdW5jdGlvbiAobWVtLCBmKSB7XG4gICAgICAgIHZhciBfcGFyc2VGb3JtYXRTdHIgPSBwYXJzZUZvcm1hdFN0cihmKSxcbiAgICAgICAgICAgIGZvcm1hdE5hbWUgPSBfcGFyc2VGb3JtYXRTdHIuZm9ybWF0TmFtZSxcbiAgICAgICAgICAgIGZvcm1hdE9wdGlvbnMgPSBfcGFyc2VGb3JtYXRTdHIuZm9ybWF0T3B0aW9ucztcblxuICAgICAgICBpZiAoX3RoaXMuZm9ybWF0c1tmb3JtYXROYW1lXSkge1xuICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSBtZW07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHZhbE9wdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZm9ybWF0UGFyYW1zICYmIG9wdGlvbnMuZm9ybWF0UGFyYW1zW29wdGlvbnMuaW50ZXJwb2xhdGlvbmtleV0gfHwge307XG4gICAgICAgICAgICB2YXIgbCA9IHZhbE9wdGlvbnMubG9jYWxlIHx8IHZhbE9wdGlvbnMubG5nIHx8IG9wdGlvbnMubG9jYWxlIHx8IG9wdGlvbnMubG5nIHx8IGxuZztcbiAgICAgICAgICAgIGZvcm1hdHRlZCA9IF90aGlzLmZvcm1hdHNbZm9ybWF0TmFtZV0obWVtLCBsLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgZm9ybWF0T3B0aW9ucyksIG9wdGlvbnMpLCB2YWxPcHRpb25zKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmxvZ2dlci53YXJuKFwidGhlcmUgd2FzIG5vIGZvcm1hdCBmdW5jdGlvbiBmb3IgXCIuY29uY2F0KGZvcm1hdE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZW07XG4gICAgICB9LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBGb3JtYXR0ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkNShvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNSh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDUoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gcmVtb3ZlUGVuZGluZyhxLCBuYW1lKSB7XG4gIGlmIChxLnBlbmRpbmdbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSBxLnBlbmRpbmdbbmFtZV07XG4gICAgcS5wZW5kaW5nQ291bnQtLTtcbiAgfVxufVxuXG52YXIgQ29ubmVjdG9yID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKENvbm5lY3RvciwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlciQyKENvbm5lY3Rvcik7XG5cbiAgZnVuY3Rpb24gQ29ubmVjdG9yKGJhY2tlbmQsIHN0b3JlLCBzZXJ2aWNlcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChpc0lFMTApIHtcbiAgICAgIEV2ZW50RW1pdHRlci5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICB9XG5cbiAgICBfdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICBfdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIF90aGlzLnNlcnZpY2VzID0gc2VydmljZXM7XG4gICAgX3RoaXMubGFuZ3VhZ2VVdGlscyA9IHNlcnZpY2VzLmxhbmd1YWdlVXRpbHM7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2JhY2tlbmRDb25uZWN0b3InKTtcbiAgICBfdGhpcy53YWl0aW5nUmVhZHMgPSBbXTtcbiAgICBfdGhpcy5tYXhQYXJhbGxlbFJlYWRzID0gb3B0aW9ucy5tYXhQYXJhbGxlbFJlYWRzIHx8IDEwO1xuICAgIF90aGlzLnJlYWRpbmdDYWxscyA9IDA7XG4gICAgX3RoaXMuc3RhdGUgPSB7fTtcbiAgICBfdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKF90aGlzLmJhY2tlbmQgJiYgX3RoaXMuYmFja2VuZC5pbml0KSB7XG4gICAgICBfdGhpcy5iYWNrZW5kLmluaXQoc2VydmljZXMsIG9wdGlvbnMuYmFja2VuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbm5lY3RvciwgW3tcbiAgICBrZXk6IFwicXVldWVMb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHF1ZXVlTG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRvTG9hZCA9IHt9O1xuICAgICAgdmFyIHBlbmRpbmcgPSB7fTtcbiAgICAgIHZhciB0b0xvYWRMYW5ndWFnZXMgPSB7fTtcbiAgICAgIHZhciB0b0xvYWROYW1lc3BhY2VzID0ge307XG4gICAgICBsYW5ndWFnZXMuZm9yRWFjaChmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHZhciBoYXNBbGxOYW1lc3BhY2VzID0gdHJ1ZTtcbiAgICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgIHZhciBuYW1lID0gXCJcIi5jb25jYXQobG5nLCBcInxcIikuY29uY2F0KG5zKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy5yZWxvYWQgJiYgX3RoaXMyLnN0b3JlLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGVbbmFtZV0gPSAyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdIDwgMCkgOyBlbHNlIGlmIChfdGhpczIuc3RhdGVbbmFtZV0gPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nW25hbWVdID09PSB1bmRlZmluZWQpIHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGVbbmFtZV0gPSAxO1xuICAgICAgICAgICAgaGFzQWxsTmFtZXNwYWNlcyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdbbmFtZV0gPT09IHVuZGVmaW5lZCkgcGVuZGluZ1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodG9Mb2FkW25hbWVdID09PSB1bmRlZmluZWQpIHRvTG9hZFtuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodG9Mb2FkTmFtZXNwYWNlc1tuc10gPT09IHVuZGVmaW5lZCkgdG9Mb2FkTmFtZXNwYWNlc1tuc10gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGFzQWxsTmFtZXNwYWNlcykgdG9Mb2FkTGFuZ3VhZ2VzW2xuZ10gPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh0b0xvYWQpLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhwZW5kaW5nKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHtcbiAgICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxuICAgICAgICAgIHBlbmRpbmdDb3VudDogT2JqZWN0LmtleXMocGVuZGluZykubGVuZ3RoLFxuICAgICAgICAgIGxvYWRlZDoge30sXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvTG9hZDogT2JqZWN0LmtleXModG9Mb2FkKSxcbiAgICAgICAgcGVuZGluZzogT2JqZWN0LmtleXMocGVuZGluZyksXG4gICAgICAgIHRvTG9hZExhbmd1YWdlczogT2JqZWN0LmtleXModG9Mb2FkTGFuZ3VhZ2VzKSxcbiAgICAgICAgdG9Mb2FkTmFtZXNwYWNlczogT2JqZWN0LmtleXModG9Mb2FkTmFtZXNwYWNlcylcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkZWQobmFtZSwgZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIGlmIChlcnIpIHRoaXMuZW1pdCgnZmFpbGVkTG9hZGluZycsIGxuZywgbnMsIGVycik7XG5cbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuYWRkUmVzb3VyY2VCdW5kbGUobG5nLCBucywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhdGVbbmFtZV0gPSBlcnIgPyAtMSA6IDI7XG4gICAgICB2YXIgbG9hZGVkID0ge307XG4gICAgICB0aGlzLnF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICAgICAgcHVzaFBhdGgocS5sb2FkZWQsIFtsbmddLCBucyk7XG4gICAgICAgIHJlbW92ZVBlbmRpbmcocSwgbmFtZSk7XG4gICAgICAgIGlmIChlcnIpIHEuZXJyb3JzLnB1c2goZXJyKTtcblxuICAgICAgICBpZiAocS5wZW5kaW5nQ291bnQgPT09IDAgJiYgIXEuZG9uZSkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHEubG9hZGVkKS5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICBpZiAoIWxvYWRlZFtsXSkgbG9hZGVkW2xdID0ge307XG4gICAgICAgICAgICB2YXIgbG9hZGVkS2V5cyA9IHEubG9hZGVkW2xdO1xuXG4gICAgICAgICAgICBpZiAobG9hZGVkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbG9hZGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgICAgICAgIGlmIChsb2FkZWRbbF1bbnNdID09PSB1bmRlZmluZWQpIGxvYWRlZFtsXVtuc10gPSB0cnVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBxLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHEuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgcS5jYWxsYmFjayhxLmVycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHEuY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCBsb2FkZWQpO1xuICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuZmlsdGVyKGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHJldHVybiAhcS5kb25lO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZChsbmcsIG5zLCBmY05hbWUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgdHJpZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG4gICAgICB2YXIgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMzUwO1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWxuZy5sZW5ndGgpIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG5cbiAgICAgIGlmICh0aGlzLnJlYWRpbmdDYWxscyA+PSB0aGlzLm1heFBhcmFsbGVsUmVhZHMpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7XG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgIGZjTmFtZTogZmNOYW1lLFxuICAgICAgICAgIHRyaWVkOiB0cmllZCxcbiAgICAgICAgICB3YWl0OiB3YWl0LFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlYWRpbmdDYWxscysrO1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgX3RoaXMzLnJlYWRpbmdDYWxscy0tO1xuXG4gICAgICAgIGlmIChfdGhpczMud2FpdGluZ1JlYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IF90aGlzMy53YWl0aW5nUmVhZHMuc2hpZnQoKTtcblxuICAgICAgICAgIF90aGlzMy5yZWFkKG5leHQubG5nLCBuZXh0Lm5zLCBuZXh0LmZjTmFtZSwgbmV4dC50cmllZCwgbmV4dC53YWl0LCBuZXh0LmNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIgJiYgZGF0YSAmJiB0cmllZCA8IDUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMy5yZWFkLmNhbGwoX3RoaXMzLCBsbmcsIG5zLCBmY05hbWUsIHRyaWVkICsgMSwgd2FpdCAqIDIsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInByZXBhcmVMb2FkaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXRoaXMuYmFja2VuZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLicpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZXMgPT09ICdzdHJpbmcnKSBsYW5ndWFnZXMgPSB0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGxhbmd1YWdlcyk7XG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuICAgICAgdmFyIHRvTG9hZCA9IHRoaXMucXVldWVMb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgb3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXRvTG9hZC50b0xvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmICghdG9Mb2FkLnBlbmRpbmcubGVuZ3RoKSBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdG9Mb2FkLnRvTG9hZC5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIF90aGlzNC5sb2FkT25lKG5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcywge30sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcywge1xuICAgICAgICByZWxvYWQ6IHRydWVcbiAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZE9uZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkT25lKG5hbWUpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgcHJlZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcbiAgICAgIHZhciBzID0gbmFtZS5zcGxpdCgnfCcpO1xuICAgICAgdmFyIGxuZyA9IHNbMF07XG4gICAgICB2YXIgbnMgPSBzWzFdO1xuICAgICAgdGhpcy5yZWFkKGxuZywgbnMsICdyZWFkJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVycikgX3RoaXM1LmxvZ2dlci53YXJuKFwiXCIuY29uY2F0KHByZWZpeCwgXCJsb2FkaW5nIG5hbWVzcGFjZSBcIikuY29uY2F0KG5zLCBcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChsbmcsIFwiIGZhaWxlZFwiKSwgZXJyKTtcbiAgICAgICAgaWYgKCFlcnIgJiYgZGF0YSkgX3RoaXM1LmxvZ2dlci5sb2coXCJcIi5jb25jYXQocHJlZml4LCBcImxvYWRlZCBuYW1lc3BhY2UgXCIpLmNvbmNhdChucywgXCIgZm9yIGxhbmd1YWdlIFwiKS5jb25jYXQobG5nKSwgZGF0YSk7XG5cbiAgICAgICAgX3RoaXM1LmxvYWRlZChuYW1lLCBlcnIsIGRhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNhdmVNaXNzaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNhdmVNaXNzaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUsIGlzVXBkYXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge307XG5cbiAgICAgIGlmICh0aGlzLnNlcnZpY2VzLnV0aWxzICYmIHRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlICYmICF0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZShuYW1lc3BhY2UpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJkaWQgbm90IHNhdmUga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgYXMgdGhlIG5hbWVzcGFjZSBcXFwiXCIpLmNvbmNhdChuYW1lc3BhY2UsIFwiXFxcIiB3YXMgbm90IHlldCBsb2FkZWRcIiksICdUaGlzIG1lYW5zIHNvbWV0aGluZyBJUyBXUk9ORyBpbiB5b3VyIHNldHVwLiBZb3UgYWNjZXNzIHRoZSB0IGZ1bmN0aW9uIGJlZm9yZSBpMThuZXh0LmluaXQgLyBpMThuZXh0LmxvYWROYW1lc3BhY2UgLyBpMThuZXh0LmNoYW5nZUxhbmd1YWdlIHdhcyBkb25lLiBXYWl0IGZvciB0aGUgY2FsbGJhY2sgb3IgUHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSBhY2Nlc3NpbmcgaXQhISEnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsIHx8IGtleSA9PT0gJycpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMuYmFja2VuZCAmJiB0aGlzLmJhY2tlbmQuY3JlYXRlKSB7XG4gICAgICAgIHRoaXMuYmFja2VuZC5jcmVhdGUobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgbnVsbCwgX29iamVjdFNwcmVhZCQ1KF9vYmplY3RTcHJlYWQkNSh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgaXNVcGRhdGU6IGlzVXBkYXRlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsYW5ndWFnZXMgfHwgIWxhbmd1YWdlc1swXSkgcmV0dXJuO1xuICAgICAgdGhpcy5zdG9yZS5hZGRSZXNvdXJjZShsYW5ndWFnZXNbMF0sIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29ubmVjdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBnZXQoKSB7XG4gIHJldHVybiB7XG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGluaXRJbW1lZGlhdGU6IHRydWUsXG4gICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBkZWZhdWx0TlM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBmYWxsYmFja0xuZzogWydkZXYnXSxcbiAgICBmYWxsYmFja05TOiBmYWxzZSxcbiAgICBzdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBub25FeHBsaWNpdFN1cHBvcnRlZExuZ3M6IGZhbHNlLFxuICAgIGxvYWQ6ICdhbGwnLFxuICAgIHByZWxvYWQ6IGZhbHNlLFxuICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0cnVlLFxuICAgIGtleVNlcGFyYXRvcjogJy4nLFxuICAgIG5zU2VwYXJhdG9yOiAnOicsXG4gICAgcGx1cmFsU2VwYXJhdG9yOiAnXycsXG4gICAgY29udGV4dFNlcGFyYXRvcjogJ18nLFxuICAgIHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiBmYWxzZSxcbiAgICBzYXZlTWlzc2luZzogZmFsc2UsXG4gICAgdXBkYXRlTWlzc2luZzogZmFsc2UsXG4gICAgc2F2ZU1pc3NpbmdUbzogJ2ZhbGxiYWNrJyxcbiAgICBzYXZlTWlzc2luZ1BsdXJhbHM6IHRydWUsXG4gICAgbWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjogZmFsc2UsXG4gICAgcG9zdFByb2Nlc3M6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkOiBmYWxzZSxcbiAgICByZXR1cm5OdWxsOiB0cnVlLFxuICAgIHJldHVybkVtcHR5U3RyaW5nOiB0cnVlLFxuICAgIHJldHVybk9iamVjdHM6IGZhbHNlLFxuICAgIGpvaW5BcnJheXM6IGZhbHNlLFxuICAgIHJldHVybmVkT2JqZWN0SGFuZGxlcjogZmFsc2UsXG4gICAgcGFyc2VNaXNzaW5nS2V5SGFuZGxlcjogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiBmYWxzZSxcbiAgICBhcHBlbmROYW1lc3BhY2VUb0NJTW9kZTogZmFsc2UsXG4gICAgb3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZShhcmdzKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBpZiAoX3R5cGVvZihhcmdzWzFdKSA9PT0gJ29iamVjdCcpIHJldCA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSByZXQuZGVmYXVsdFZhbHVlID0gYXJnc1sxXTtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1syXSA9PT0gJ3N0cmluZycpIHJldC50RGVzY3JpcHRpb24gPSBhcmdzWzJdO1xuXG4gICAgICBpZiAoX3R5cGVvZihhcmdzWzJdKSA9PT0gJ29iamVjdCcgfHwgX3R5cGVvZihhcmdzWzNdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmdzWzNdIHx8IGFyZ3NbMl07XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldFtrZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGludGVycG9sYXRpb246IHtcbiAgICAgIGVzY2FwZVZhbHVlOiB0cnVlLFxuICAgICAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQodmFsdWUsIF9mb3JtYXQsIGxuZywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcHJlZml4OiAne3snLFxuICAgICAgc3VmZml4OiAnfX0nLFxuICAgICAgZm9ybWF0U2VwYXJhdG9yOiAnLCcsXG4gICAgICB1bmVzY2FwZVByZWZpeDogJy0nLFxuICAgICAgbmVzdGluZ1ByZWZpeDogJyR0KCcsXG4gICAgICBuZXN0aW5nU3VmZml4OiAnKScsXG4gICAgICBuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjogJywnLFxuICAgICAgbWF4UmVwbGFjZXM6IDEwMDAsXG4gICAgICBza2lwT25WYXJpYWJsZXM6IHRydWVcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLm5zID09PSAnc3RyaW5nJykgb3B0aW9ucy5ucyA9IFtvcHRpb25zLm5zXTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZhbGxiYWNrTG5nID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja0xuZyA9IFtvcHRpb25zLmZhbGxiYWNrTG5nXTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZhbGxiYWNrTlMgPT09ICdzdHJpbmcnKSBvcHRpb25zLmZhbGxiYWNrTlMgPSBbb3B0aW9ucy5mYWxsYmFja05TXTtcblxuICBpZiAob3B0aW9ucy5zdXBwb3J0ZWRMbmdzICYmIG9wdGlvbnMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKCdjaW1vZGUnKSA8IDApIHtcbiAgICBvcHRpb25zLnN1cHBvcnRlZExuZ3MgPSBvcHRpb25zLnN1cHBvcnRlZExuZ3MuY29uY2F0KFsnY2ltb2RlJ10pO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG93bktleXMkNihvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNih0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDYoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIkMyhEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzKCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGJpbmRNZW1iZXJGdW5jdGlvbnMoaW5zdCkge1xuICB2YXIgbWVtcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnN0KSk7XG4gIG1lbXMuZm9yRWFjaChmdW5jdGlvbiAobWVtKSB7XG4gICAgaWYgKHR5cGVvZiBpbnN0W21lbV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluc3RbbWVtXSA9IGluc3RbbWVtXS5iaW5kKGluc3QpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBJMThuID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKEkxOG4sIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMyhJMThuKTtcblxuICBmdW5jdGlvbiBJMThuKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJMThuKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMub3B0aW9ucyA9IHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucyk7XG4gICAgX3RoaXMuc2VydmljZXMgPSB7fTtcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgIF90aGlzLm1vZHVsZXMgPSB7XG4gICAgICBleHRlcm5hbDogW11cbiAgICB9O1xuICAgIGJpbmRNZW1iZXJGdW5jdGlvbnMoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuXG4gICAgaWYgKGNhbGxiYWNrICYmICFfdGhpcy5pc0luaXRpYWxpemVkICYmICFvcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgIGlmICghX3RoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuaW5pdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoSTE4biwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5kZWZhdWx0TlMgJiYgb3B0aW9ucy5ucykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgb3B0aW9ucy5kZWZhdWx0TlMgPSBvcHRpb25zLm5zO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnMuaW5kZXhPZigndHJhbnNsYXRpb24nKSA8IDApIHtcbiAgICAgICAgICBvcHRpb25zLmRlZmF1bHROUyA9IG9wdGlvbnMubnNbMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRlZk9wdHMgPSBnZXQoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCBkZWZPcHRzKSwgdGhpcy5vcHRpb25zKSwgdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSAhPT0gJ3YxJykge1xuICAgICAgICB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIGRlZk9wdHMuaW50ZXJwb2xhdGlvbiksIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkS2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVzZXJEZWZpbmVkTnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDbGFzc09uRGVtYW5kKENsYXNzT3JPYmplY3QpIHtcbiAgICAgICAgaWYgKCFDbGFzc09yT2JqZWN0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBDbGFzc09yT2JqZWN0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbmV3IENsYXNzT3JPYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIENsYXNzT3JPYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5sb2dnZXIpIHtcbiAgICAgICAgICBiYXNlTG9nZ2VyLmluaXQoY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMubG9nZ2VyKSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlTG9nZ2VyLmluaXQobnVsbCwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb3JtYXR0ZXI7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGZvcm1hdHRlciA9IEZvcm1hdHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsdSA9IG5ldyBMYW5ndWFnZVV0aWwodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBSZXNvdXJjZVN0b3JlKHRoaXMub3B0aW9ucy5yZXNvdXJjZXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHZhciBzID0gdGhpcy5zZXJ2aWNlcztcbiAgICAgICAgcy5sb2dnZXIgPSBiYXNlTG9nZ2VyO1xuICAgICAgICBzLnJlc291cmNlU3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgICAgICBzLmxhbmd1YWdlVXRpbHMgPSBsdTtcbiAgICAgICAgcy5wbHVyYWxSZXNvbHZlciA9IG5ldyBQbHVyYWxSZXNvbHZlcihsdSwge1xuICAgICAgICAgIHByZXBlbmQ6IHRoaXMub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsXG4gICAgICAgICAgY29tcGF0aWJpbGl0eUpTT046IHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTixcbiAgICAgICAgICBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgKCF0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgfHwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0ID09PSBkZWZPcHRzLmludGVycG9sYXRpb24uZm9ybWF0KSkge1xuICAgICAgICAgIHMuZm9ybWF0dGVyID0gY3JlYXRlQ2xhc3NPbkRlbWFuZChmb3JtYXR0ZXIpO1xuICAgICAgICAgIHMuZm9ybWF0dGVyLmluaXQocywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgPSBzLmZvcm1hdHRlci5mb3JtYXQuYmluZChzLmZvcm1hdHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBzLmludGVycG9sYXRvciA9IG5ldyBJbnRlcnBvbGF0b3IodGhpcy5vcHRpb25zKTtcbiAgICAgICAgcy51dGlscyA9IHtcbiAgICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IHRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICAgICAgcy5iYWNrZW5kQ29ubmVjdG9yID0gbmV3IENvbm5lY3RvcihjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5iYWNrZW5kKSwgcy5yZXNvdXJjZVN0b3JlLCBzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczIuZW1pdC5hcHBseShfdGhpczIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKSB7XG4gICAgICAgICAgcy5sYW5ndWFnZURldGVjdG9yID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcik7XG4gICAgICAgICAgcy5sYW5ndWFnZURldGVjdG9yLmluaXQocywgdGhpcy5vcHRpb25zLmRldGVjdGlvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCkge1xuICAgICAgICAgIHMuaTE4bkZvcm1hdCA9IGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQpO1xuICAgICAgICAgIGlmIChzLmkxOG5Gb3JtYXQuaW5pdCkgcy5pMThuRm9ybWF0LmluaXQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcih0aGlzLnNlcnZpY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczIuZW1pdC5hcHBseShfdGhpczIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgaWYgKG0uaW5pdCkgbS5pbml0KF90aGlzMik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1hdCA9IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdDtcbiAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gbm9vcDtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLm9wdGlvbnMubG5nKSB7XG4gICAgICAgIHZhciBjb2RlcyA9IHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgIGlmIChjb2Rlcy5sZW5ndGggPiAwICYmIGNvZGVzWzBdICE9PSAnZGV2JykgdGhpcy5vcHRpb25zLmxuZyA9IGNvZGVzWzBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5vcHRpb25zLmxuZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdpbml0OiBubyBsYW5ndWFnZURldGVjdG9yIGlzIHVzZWQgYW5kIG5vIGxuZyBpcyBkZWZpbmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdG9yZUFwaSA9IFsnZ2V0UmVzb3VyY2UnLCAnaGFzUmVzb3VyY2VCdW5kbGUnLCAnZ2V0UmVzb3VyY2VCdW5kbGUnLCAnZ2V0RGF0YUJ5TGFuZ3VhZ2UnXTtcbiAgICAgIHN0b3JlQXBpLmZvckVhY2goZnVuY3Rpb24gKGZjTmFtZSkge1xuICAgICAgICBfdGhpczJbZmNOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHN0b3JlO1xuXG4gICAgICAgICAgcmV0dXJuIChfdGhpczIkc3RvcmUgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RvcmVBcGlDaGFpbmVkID0gWydhZGRSZXNvdXJjZScsICdhZGRSZXNvdXJjZXMnLCAnYWRkUmVzb3VyY2VCdW5kbGUnLCAncmVtb3ZlUmVzb3VyY2VCdW5kbGUnXTtcbiAgICAgIHN0b3JlQXBpQ2hhaW5lZC5mb3JFYWNoKGZ1bmN0aW9uIChmY05hbWUpIHtcbiAgICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRzdG9yZTI7XG5cbiAgICAgICAgICAoX3RoaXMyJHN0b3JlMiA9IF90aGlzMi5zdG9yZSlbZmNOYW1lXS5hcHBseShfdGhpczIkc3RvcmUyLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcblxuICAgICAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24gZmluaXNoKGVyciwgdCkge1xuICAgICAgICAgIGlmIChfdGhpczIuaXNJbml0aWFsaXplZCAmJiAhX3RoaXMyLmluaXRpYWxpemVkU3RvcmVPbmNlKSBfdGhpczIubG9nZ2VyLndhcm4oJ2luaXQ6IGkxOG5leHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCBjYWxsIGluaXQganVzdCBvbmNlIScpO1xuICAgICAgICAgIF90aGlzMi5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLmlzQ2xvbmUpIF90aGlzMi5sb2dnZXIubG9nKCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcblxuICAgICAgICAgIF90aGlzMi5lbWl0KCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcblxuICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUodCk7XG4gICAgICAgICAgY2FsbGJhY2soZXJyLCB0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoX3RoaXMyLmxhbmd1YWdlcyAmJiBfdGhpczIub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnICYmICFfdGhpczIuaXNJbml0aWFsaXplZCkgcmV0dXJuIGZpbmlzaChudWxsLCBfdGhpczIudC5iaW5kKF90aGlzMikpO1xuXG4gICAgICAgIF90aGlzMi5jaGFuZ2VMYW5ndWFnZShfdGhpczIub3B0aW9ucy5sbmcsIGZpbmlzaCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnJlc291cmNlcyB8fCAhdGhpcy5vcHRpb25zLmluaXRJbW1lZGlhdGUpIHtcbiAgICAgICAgbG9hZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dChsb2FkLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMobGFuZ3VhZ2UpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG4gICAgICB2YXIgdXNlZENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB2YXIgdXNlZExuZyA9IHR5cGVvZiBsYW5ndWFnZSA9PT0gJ3N0cmluZycgPyBsYW5ndWFnZSA6IHRoaXMubGFuZ3VhZ2U7XG4gICAgICBpZiAodHlwZW9mIGxhbmd1YWdlID09PSAnZnVuY3Rpb24nKSB1c2VkQ2FsbGJhY2sgPSBsYW5ndWFnZTtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8IHRoaXMub3B0aW9ucy5wYXJ0aWFsQnVuZGxlZExhbmd1YWdlcykge1xuICAgICAgICBpZiAodXNlZExuZyAmJiB1c2VkTG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm4gdXNlZENhbGxiYWNrKCk7XG4gICAgICAgIHZhciB0b0xvYWQgPSBbXTtcblxuICAgICAgICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKGxuZykge1xuICAgICAgICAgIGlmICghbG5nKSByZXR1cm47XG5cbiAgICAgICAgICB2YXIgbG5ncyA9IF90aGlzMy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsbmcpO1xuXG4gICAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICBpZiAodG9Mb2FkLmluZGV4T2YobCkgPCAwKSB0b0xvYWQucHVzaChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXVzZWRMbmcpIHtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgICBmYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmQodXNlZExuZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnByZWxvYWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZC5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmxvYWQodG9Mb2FkLCB0aGlzLm9wdGlvbnMubnMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKCFlICYmICFfdGhpczMucmVzb2x2ZWRMYW5ndWFnZSAmJiBfdGhpczMubGFuZ3VhZ2UpIF90aGlzMy5zZXRSZXNvbHZlZExhbmd1YWdlKF90aGlzMy5sYW5ndWFnZSk7XG4gICAgICAgICAgdXNlZENhbGxiYWNrKGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzZWRDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZFJlc291cmNlcyhsbmdzLCBucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAoIWxuZ3MpIGxuZ3MgPSB0aGlzLmxhbmd1YWdlcztcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLm5zO1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuICAgICAgdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnJlbG9hZChsbmdzLCBucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVzZShtb2R1bGUpIHtcbiAgICAgIGlmICghbW9kdWxlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhbiB1bmRlZmluZWQgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKScpO1xuICAgICAgaWYgKCFtb2R1bGUudHlwZSkgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHBhc3NpbmcgYSB3cm9uZyBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5iYWNrZW5kID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdsb2dnZXInIHx8IG1vZHVsZS5sb2cgJiYgbW9kdWxlLndhcm4gJiYgbW9kdWxlLmVycm9yKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sb2dnZXIgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2xhbmd1YWdlRGV0ZWN0b3InKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdpMThuRm9ybWF0Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAncG9zdFByb2Nlc3NvcicpIHtcbiAgICAgICAgcG9zdFByb2Nlc3Nvci5hZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2Zvcm1hdHRlcicpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmZvcm1hdHRlciA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnM3JkUGFydHknKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKG1vZHVsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRSZXNvbHZlZExhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFJlc29sdmVkTGFuZ3VhZ2UobCkge1xuICAgICAgaWYgKCFsIHx8ICF0aGlzLmxhbmd1YWdlcykgcmV0dXJuO1xuICAgICAgaWYgKFsnY2ltb2RlJywgJ2RldiddLmluZGV4T2YobCkgPiAtMSkgcmV0dXJuO1xuXG4gICAgICBmb3IgKHZhciBsaSA9IDA7IGxpIDwgdGhpcy5sYW5ndWFnZXMubGVuZ3RoOyBsaSsrKSB7XG4gICAgICAgIHZhciBsbmdJbkxuZ3MgPSB0aGlzLmxhbmd1YWdlc1tsaV07XG4gICAgICAgIGlmIChbJ2NpbW9kZScsICdkZXYnXS5pbmRleE9mKGxuZ0luTG5ncykgPiAtMSkgY29udGludWU7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZ0luTG5ncykpIHtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgPSBsbmdJbkxuZ3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSBsbmc7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgdGhpcy5lbWl0KCdsYW5ndWFnZUNoYW5naW5nJywgbG5nKTtcblxuICAgICAgdmFyIHNldExuZ1Byb3BzID0gZnVuY3Rpb24gc2V0TG5nUHJvcHMobCkge1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2UgPSBsO1xuICAgICAgICBfdGhpczQubGFuZ3VhZ2VzID0gX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGwpO1xuICAgICAgICBfdGhpczQucmVzb2x2ZWRMYW5ndWFnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBfdGhpczQuc2V0UmVzb2x2ZWRMYW5ndWFnZShsKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBkb25lID0gZnVuY3Rpb24gZG9uZShlcnIsIGwpIHtcbiAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICBzZXRMbmdQcm9wcyhsKTtcblxuICAgICAgICAgIF90aGlzNC50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgX3RoaXM0LmVtaXQoJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuXG4gICAgICAgICAgX3RoaXM0LmxvZ2dlci5sb2coJ2xhbmd1YWdlQ2hhbmdlZCcsIGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzNC5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgdmFyIHNldExuZyA9IGZ1bmN0aW9uIHNldExuZyhsbmdzKSB7XG4gICAgICAgIGlmICghbG5nICYmICFsbmdzICYmIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yKSBsbmdzID0gW107XG4gICAgICAgIHZhciBsID0gdHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnID8gbG5ncyA6IF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcyhsbmdzKTtcblxuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIGlmICghX3RoaXM0Lmxhbmd1YWdlKSB7XG4gICAgICAgICAgICBzZXRMbmdQcm9wcyhsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIV90aGlzNC50cmFuc2xhdG9yLmxhbmd1YWdlKSBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcbiAgICAgICAgICBpZiAoX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlKGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM0LmxvYWRSZXNvdXJjZXMobCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGRvbmUoZXJyLCBsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYykge1xuICAgICAgICBzZXRMbmcodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWxuZyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3Qoc2V0TG5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldExuZyhsbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZpeGVkVFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaXhlZFQobG5nLCBucywga2V5UHJlZml4KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGZpeGVkVCA9IGZ1bmN0aW9uIGZpeGVkVChrZXksIG9wdHMpIHtcbiAgICAgICAgdmFyIG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKF90eXBlb2Yob3B0cykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzNS5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFtrZXksIG9wdHNdLmNvbmNhdChyZXN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNih7fSwgb3B0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmxuZyA9IG9wdGlvbnMubG5nIHx8IGZpeGVkVC5sbmc7XG4gICAgICAgIG9wdGlvbnMubG5ncyA9IG9wdGlvbnMubG5ncyB8fCBmaXhlZFQubG5ncztcbiAgICAgICAgb3B0aW9ucy5ucyA9IG9wdGlvbnMubnMgfHwgZml4ZWRULm5zO1xuICAgICAgICBvcHRpb25zLmtleVByZWZpeCA9IG9wdGlvbnMua2V5UHJlZml4IHx8IGtleVByZWZpeCB8fCBmaXhlZFQua2V5UHJlZml4O1xuICAgICAgICB2YXIga2V5U2VwYXJhdG9yID0gX3RoaXM1Lm9wdGlvbnMua2V5U2VwYXJhdG9yIHx8ICcuJztcbiAgICAgICAgdmFyIHJlc3VsdEtleSA9IG9wdGlvbnMua2V5UHJlZml4ID8gXCJcIi5jb25jYXQob3B0aW9ucy5rZXlQcmVmaXgpLmNvbmNhdChrZXlTZXBhcmF0b3IpLmNvbmNhdChrZXkpIDoga2V5O1xuICAgICAgICByZXR1cm4gX3RoaXM1LnQocmVzdWx0S2V5LCBvcHRpb25zKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgbG5nID09PSAnc3RyaW5nJykge1xuICAgICAgICBmaXhlZFQubG5nID0gbG5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4ZWRULmxuZ3MgPSBsbmc7XG4gICAgICB9XG5cbiAgICAgIGZpeGVkVC5ucyA9IG5zO1xuICAgICAgZml4ZWRULmtleVByZWZpeCA9IGtleVByZWZpeDtcbiAgICAgIHJldHVybiBmaXhlZFQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdCgpIHtcbiAgICAgIHZhciBfdGhpcyR0cmFuc2xhdG9yO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdGhpcyR0cmFuc2xhdG9yID0gdGhpcy50cmFuc2xhdG9yKS50cmFuc2xhdGUuYXBwbHkoX3RoaXMkdHJhbnNsYXRvciwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXhpc3RzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4aXN0cygpIHtcbiAgICAgIHZhciBfdGhpcyR0cmFuc2xhdG9yMjtcblxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRvciAmJiAoX3RoaXMkdHJhbnNsYXRvcjIgPSB0aGlzLnRyYW5zbGF0b3IpLmV4aXN0cy5hcHBseShfdGhpcyR0cmFuc2xhdG9yMiwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0RGVmYXVsdE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREZWZhdWx0TmFtZXNwYWNlKG5zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TID0gbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xvYWRlZE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMb2FkZWROYW1lc3BhY2UobnMpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2hhc0xvYWRlZE5hbWVzcGFjZTogaTE4bmV4dCB3YXMgbm90IGluaXRpYWxpemVkJywgdGhpcy5sYW5ndWFnZXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZXMgfHwgIXRoaXMubGFuZ3VhZ2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5JywgdGhpcy5sYW5ndWFnZXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsbmcgPSB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgfHwgdGhpcy5sYW5ndWFnZXNbMF07XG4gICAgICB2YXIgZmFsbGJhY2tMbmcgPSB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgOiBmYWxzZTtcbiAgICAgIHZhciBsYXN0TG5nID0gdGhpcy5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZXMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAobG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgdmFyIGxvYWROb3RQZW5kaW5nID0gZnVuY3Rpb24gbG9hZE5vdFBlbmRpbmcobCwgbikge1xuICAgICAgICB2YXIgbG9hZFN0YXRlID0gX3RoaXM2LnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3Iuc3RhdGVbXCJcIi5jb25jYXQobCwgXCJ8XCIpLmNvbmNhdChuKV07XG5cbiAgICAgICAgcmV0dXJuIGxvYWRTdGF0ZSA9PT0gLTEgfHwgbG9hZFN0YXRlID09PSAyO1xuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMucHJlY2hlY2spIHtcbiAgICAgICAgdmFyIHByZVJlc3VsdCA9IG9wdGlvbnMucHJlY2hlY2sodGhpcywgbG9hZE5vdFBlbmRpbmcpO1xuICAgICAgICBpZiAocHJlUmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiBwcmVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQgfHwgdGhpcy5vcHRpb25zLnJlc291cmNlcyAmJiAhdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChsb2FkTm90UGVuZGluZyhsbmcsIG5zKSAmJiAoIWZhbGxiYWNrTG5nIHx8IGxvYWROb3RQZW5kaW5nKGxhc3RMbmcsIG5zKSkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkTmFtZXNwYWNlcyhucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5ucykge1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbnMgPT09ICdzdHJpbmcnKSBucyA9IFtuc107XG4gICAgICBucy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIGlmIChfdGhpczcub3B0aW9ucy5ucy5pbmRleE9mKG4pIDwgMCkgX3RoaXM3Lm9wdGlvbnMubnMucHVzaChuKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZExhbmd1YWdlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkTGFuZ3VhZ2VzKGxuZ3MsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgaWYgKHR5cGVvZiBsbmdzID09PSAnc3RyaW5nJykgbG5ncyA9IFtsbmdzXTtcbiAgICAgIHZhciBwcmVsb2FkZWQgPSB0aGlzLm9wdGlvbnMucHJlbG9hZCB8fCBbXTtcbiAgICAgIHZhciBuZXdMbmdzID0gbG5ncy5maWx0ZXIoZnVuY3Rpb24gKGxuZykge1xuICAgICAgICByZXR1cm4gcHJlbG9hZGVkLmluZGV4T2YobG5nKSA8IDA7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFuZXdMbmdzLmxlbmd0aCkge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRpb25zLnByZWxvYWQgPSBwcmVsb2FkZWQuY29uY2F0KG5ld0xuZ3MpO1xuICAgICAgdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGlyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpcihsbmcpIHtcbiAgICAgIGlmICghbG5nKSBsbmcgPSB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgfHwgKHRoaXMubGFuZ3VhZ2VzICYmIHRoaXMubGFuZ3VhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLmxhbmd1YWdlc1swXSA6IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgaWYgKCFsbmcpIHJldHVybiAncnRsJztcbiAgICAgIHZhciBydGxMbmdzID0gWydhcicsICdzaHUnLCAnc3FyJywgJ3NzaCcsICd4YWEnLCAneWhkJywgJ3l1ZCcsICdhYW8nLCAnYWJoJywgJ2FidicsICdhY20nLCAnYWNxJywgJ2FjdycsICdhY3gnLCAnYWN5JywgJ2FkZicsICdhZHMnLCAnYWViJywgJ2FlYycsICdhZmInLCAnYWpwJywgJ2FwYycsICdhcGQnLCAnYXJiJywgJ2FycScsICdhcnMnLCAnYXJ5JywgJ2FyeicsICdhdXonLCAnYXZsJywgJ2F5aCcsICdheWwnLCAnYXluJywgJ2F5cCcsICdiYnonLCAncGdhJywgJ2hlJywgJ2l3JywgJ3BzJywgJ3BidCcsICdwYnUnLCAncHN0JywgJ3BycCcsICdwcmQnLCAndWcnLCAndXInLCAneWRkJywgJ3lkcycsICd5aWgnLCAnamknLCAneWknLCAnaGJvJywgJ21lbicsICd4bW4nLCAnZmEnLCAnanByJywgJ3BlbycsICdwZXMnLCAncHJzJywgJ2R2JywgJ3NhbScsICdja2InXTtcbiAgICAgIHJldHVybiBydGxMbmdzLmluZGV4T2YodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGxuZykpID4gLTEgfHwgbG5nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignLWFyYWInKSA+IDEgPyAncnRsJyA6ICdsdHInO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbG9uZUluc3RhbmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lSW5zdGFuY2UoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuXG4gICAgICB2YXIgbWVyZ2VkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCB0aGlzLm9wdGlvbnMpLCBvcHRpb25zKSwge1xuICAgICAgICBpc0Nsb25lOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgdmFyIGNsb25lID0gbmV3IEkxOG4obWVyZ2VkT3B0aW9ucyk7XG4gICAgICB2YXIgbWVtYmVyc1RvQ29weSA9IFsnc3RvcmUnLCAnc2VydmljZXMnLCAnbGFuZ3VhZ2UnXTtcbiAgICAgIG1lbWJlcnNUb0NvcHkuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICBjbG9uZVttXSA9IF90aGlzOFttXTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmUuc2VydmljZXMgPSBfb2JqZWN0U3ByZWFkJDYoe30sIHRoaXMuc2VydmljZXMpO1xuICAgICAgY2xvbmUuc2VydmljZXMudXRpbHMgPSB7XG4gICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogY2xvbmUuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQoY2xvbmUpXG4gICAgICB9O1xuICAgICAgY2xvbmUudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKGNsb25lLnNlcnZpY2VzLCBjbG9uZS5vcHRpb25zKTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40ID4gMSA/IF9sZW40IC0gMSA6IDApLCBfa2V5NCA9IDE7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgICBhcmdzW19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvbmUuZW1pdC5hcHBseShjbG9uZSwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgfSk7XG4gICAgICBjbG9uZS5pbml0KG1lcmdlZE9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3Iub3B0aW9ucyA9IGNsb25lLm9wdGlvbnM7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLmJhY2tlbmRDb25uZWN0b3Iuc2VydmljZXMudXRpbHMgPSB7XG4gICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogY2xvbmUuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQoY2xvbmUpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UsXG4gICAgICAgIGxhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMsXG4gICAgICAgIHJlc29sdmVkTGFuZ3VhZ2U6IHRoaXMucmVzb2x2ZWRMYW5ndWFnZVxuICAgICAgfTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSTE4bjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuX2RlZmluZVByb3BlcnR5KEkxOG4sIFwiY3JlYXRlSW5zdGFuY2VcIiwgZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IEkxOG4ob3B0aW9ucywgY2FsbGJhY2spO1xufSk7XG5cbnZhciBpbnN0YW5jZSA9IEkxOG4uY3JlYXRlSW5zdGFuY2UoKTtcbmluc3RhbmNlLmNyZWF0ZUluc3RhbmNlID0gSTE4bi5jcmVhdGVJbnN0YW5jZTtcblxudmFyIGNyZWF0ZUluc3RhbmNlID0gaW5zdGFuY2UuY3JlYXRlSW5zdGFuY2U7XG52YXIgaW5pdCA9IGluc3RhbmNlLmluaXQ7XG52YXIgbG9hZFJlc291cmNlcyA9IGluc3RhbmNlLmxvYWRSZXNvdXJjZXM7XG52YXIgcmVsb2FkUmVzb3VyY2VzID0gaW5zdGFuY2UucmVsb2FkUmVzb3VyY2VzO1xudmFyIHVzZSA9IGluc3RhbmNlLnVzZTtcbnZhciBjaGFuZ2VMYW5ndWFnZSA9IGluc3RhbmNlLmNoYW5nZUxhbmd1YWdlO1xudmFyIGdldEZpeGVkVCA9IGluc3RhbmNlLmdldEZpeGVkVDtcbnZhciB0ID0gaW5zdGFuY2UudDtcbnZhciBleGlzdHMgPSBpbnN0YW5jZS5leGlzdHM7XG52YXIgc2V0RGVmYXVsdE5hbWVzcGFjZSA9IGluc3RhbmNlLnNldERlZmF1bHROYW1lc3BhY2U7XG52YXIgaGFzTG9hZGVkTmFtZXNwYWNlID0gaW5zdGFuY2UuaGFzTG9hZGVkTmFtZXNwYWNlO1xudmFyIGxvYWROYW1lc3BhY2VzID0gaW5zdGFuY2UubG9hZE5hbWVzcGFjZXM7XG52YXIgbG9hZExhbmd1YWdlcyA9IGluc3RhbmNlLmxvYWRMYW5ndWFnZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlO1xuZXhwb3J0IHsgY2hhbmdlTGFuZ3VhZ2UsIGNyZWF0ZUluc3RhbmNlLCBleGlzdHMsIGdldEZpeGVkVCwgaGFzTG9hZGVkTmFtZXNwYWNlLCBpbml0LCBsb2FkTGFuZ3VhZ2VzLCBsb2FkTmFtZXNwYWNlcywgbG9hZFJlc291cmNlcywgcmVsb2FkUmVzb3VyY2VzLCBzZXREZWZhdWx0TmFtZXNwYWNlLCB0LCB1c2UgfTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9BcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSJdLCJuYW1lcyI6WyJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiaSIsImxlbmd0aCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImtleSIsIl9jcmVhdGVDbGFzcyIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsInZhbHVlIiwic2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJjYWxsIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2dldFByb3RvdHlwZU9mIiwibyIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwiYXJyMiIsIkFycmF5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwic291cmNlIiwiZm9yRWFjaCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uc29sZUxvZ2dlciIsInR5cGUiLCJsb2ciLCJhcmdzIiwidGhpcyIsIm91dHB1dCIsIndhcm4iLCJlcnJvciIsImNvbnNvbGUiLCJiYXNlTG9nZ2VyIiwiTG9nZ2VyIiwiY29uY3JldGVMb2dnZXIiLCJvcHRpb25zIiwidW5kZWZpbmVkIiwiaW5pdCIsInByZWZpeCIsImxvZ2dlciIsImRlYnVnIiwiYm9vbCIsIl9sZW4iLCJfa2V5IiwiZm9yd2FyZCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiX2xlbjQiLCJfa2V5NCIsImx2bCIsImRlYnVnT25seSIsImNvbmNhdCIsIm1vZHVsZU5hbWUiLCJFdmVudEVtaXR0ZXIiLCJvYnNlcnZlcnMiLCJldmVudHMiLCJsaXN0ZW5lciIsIl90aGlzIiwic3BsaXQiLCJldmVudCIsImwiLCJjbG9uZWQiLCJvYnNlcnZlciIsIl9jbG9uZWQiLCJkZWZlciIsInJlcyIsInJlaiIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm1ha2VTdHJpbmciLCJjb3B5IiwiYSIsInMiLCJ0IiwibSIsImdldExhc3RPZlBhdGgiLCJwYXRoIiwiRW1wdHkiLCJjbGVhbktleSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY2FuTm90VHJhdmVyc2VEZWVwZXIiLCJzdGFjayIsInNoaWZ0IiwiaGFzT3duUHJvcGVydHkiLCJrIiwic2V0UGF0aCIsIm5ld1ZhbHVlIiwiX2dldExhc3RPZlBhdGgiLCJnZXRQYXRoIiwiX2dldExhc3RPZlBhdGgzIiwiZ2V0UGF0aFdpdGhEZWZhdWx0cyIsImRhdGEiLCJkZWZhdWx0RGF0YSIsImRlZXBFeHRlbmQiLCJvdmVyd3JpdGUiLCJwcm9wIiwiU3RyaW5nIiwicmVnZXhFc2NhcGUiLCJzdHIiLCJfZW50aXR5TWFwIiwiaXNJRTEwIiwid2luZG93IiwibmF2aWdhdG9yIiwidXNlckFnZW50RGF0YSIsInVzZXJBZ2VudCIsImNoYXJzIiwib3duS2V5cyQxIiwiX29iamVjdFNwcmVhZCQxIiwiZGVlcEZpbmQiLCJrZXlTZXBhcmF0b3IiLCJwYXRocyIsImN1cnJlbnQiLCJqIiwicCIsInNsaWNlIiwiam9pbiIsIm1peCIsImVuZHNXaXRoIiwiam9pbmVkUGF0aCIsIlJlc291cmNlU3RvcmUiLCJfRXZlbnRFbWl0dGVyIiwiRGVyaXZlZCIsImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfc3VwZXIiLCJSZWZsZWN0IiwiY29uc3RydWN0Iiwic2hhbSIsIlByb3h5IiwiQm9vbGVhbiIsInZhbHVlT2YiLCJlIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsInJlc3VsdCIsIlN1cGVyIiwiTmV3VGFyZ2V0IiwibnMiLCJkZWZhdWx0TlMiLCJpZ25vcmVKU09OU3RydWN0dXJlIiwiaW5kZXgiLCJzcGxpY2UiLCJsbmciLCJzaWxlbnQiLCJhZGROYW1lc3BhY2VzIiwiZW1pdCIsInJlc291cmNlcyIsInRvU3RyaW5nIiwiYWRkUmVzb3VyY2UiLCJkZWVwIiwicGFjayIsImhhc1Jlc291cmNlQnVuZGxlIiwicmVtb3ZlTmFtZXNwYWNlcyIsImdldFJlc291cmNlIiwiY29tcGF0aWJpbGl0eUFQSSIsImdldERhdGFCeUxhbmd1YWdlIiwiZmluZCIsInYiLCJwb3N0UHJvY2Vzc29yIiwicHJvY2Vzc29ycyIsImFkZFBvc3RQcm9jZXNzb3IiLCJtb2R1bGUiLCJuYW1lIiwiaGFuZGxlIiwidHJhbnNsYXRvciIsInByb2Nlc3NvciIsInByb2Nlc3MiLCJvd25LZXlzJDIiLCJfb2JqZWN0U3ByZWFkJDIiLCJjaGVja2VkTG9hZGVkRm9yIiwiVHJhbnNsYXRvciIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSIsInNlcnZpY2VzIiwibGFuZ3VhZ2UiLCJpbnRlcnBvbGF0aW9uIiwicmVzb2x2ZWQiLCJuc1NlcGFyYXRvciIsIm5hbWVzcGFjZXMiLCJ3b3VsZENoZWNrRm9yTnNJbktleSIsInNlZW1zTmF0dXJhbExhbmd1YWdlIiwidXNlckRlZmluZWRLZXlTZXBhcmF0b3IiLCJ1c2VyRGVmaW5lZE5zU2VwYXJhdG9yIiwicG9zc2libGVDaGFycyIsImMiLCJyIiwiUmVnRXhwIiwibWFwIiwibWF0Y2hlZCIsInRlc3QiLCJraSIsInN1YnN0cmluZyIsImxvb2tzTGlrZU9iamVjdFBhdGgiLCJtYXRjaCIsImludGVycG9sYXRvciIsIm5lc3RpbmdSZWdleHAiLCJwYXJ0cyIsImxhc3RLZXkiLCJfdGhpczIiLCJvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlciIsImlzQXJyYXkiLCJyZXR1cm5EZXRhaWxzIiwiX3RoaXMkZXh0cmFjdEZyb21LZXkiLCJleHRyYWN0RnJvbUtleSIsIm5hbWVzcGFjZSIsImFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlIiwidG9Mb3dlckNhc2UiLCJyZXNVc2VkS2V5IiwidXNlZEtleSIsInJlc0V4YWN0VXNlZEtleSIsImV4YWN0VXNlZEtleSIsInJlc1R5cGUiLCJub09iamVjdCIsImpvaW5BcnJheXMiLCJoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCIsImkxOG5Gb3JtYXQiLCJoYW5kbGVBc09iamVjdCIsInJldHVybk9iamVjdHMiLCJyZXR1cm5lZE9iamVjdEhhbmRsZXIiLCJyZXNUeXBlSXNBcnJheSIsIm5ld0tleVRvVXNlIiwiZGVlcEtleSIsInRyYW5zbGF0ZSIsImV4dGVuZFRyYW5zbGF0aW9uIiwidXNlZERlZmF1bHQiLCJuZWVkc1BsdXJhbEhhbmRsaW5nIiwiY291bnQiLCJoYXNEZWZhdWx0VmFsdWUiLCJkZWZhdWx0VmFsdWVTdWZmaXgiLCJwbHVyYWxSZXNvbHZlciIsImdldFN1ZmZpeCIsImRlZmF1bHRWYWx1ZSIsImlzVmFsaWRMb29rdXAiLCJtaXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkiLCJyZXNGb3JNaXNzaW5nIiwidXBkYXRlTWlzc2luZyIsImZrIiwibG5ncyIsImZhbGxiYWNrTG5ncyIsImxhbmd1YWdlVXRpbHMiLCJnZXRGYWxsYmFja0NvZGVzIiwiZmFsbGJhY2tMbmciLCJzYXZlTWlzc2luZ1RvIiwidG9SZXNvbHZlSGllcmFyY2h5Iiwic2VuZCIsInNwZWNpZmljRGVmYXVsdFZhbHVlIiwiZGVmYXVsdEZvck1pc3NpbmciLCJtaXNzaW5nS2V5SGFuZGxlciIsImJhY2tlbmRDb25uZWN0b3IiLCJzYXZlTWlzc2luZyIsInNhdmVNaXNzaW5nUGx1cmFscyIsImdldFN1ZmZpeGVzIiwic3VmZml4IiwiYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5IiwicGFyc2VNaXNzaW5nS2V5SGFuZGxlciIsIl90aGlzMyIsInBhcnNlIiwiZGVmYXVsdFZhcmlhYmxlcyIsInVzZWRMbmciLCJ1c2VkTlMiLCJza2lwSW50ZXJwb2xhdGlvbiIsIm5lc3RCZWYiLCJza2lwT25WYXJpYWJsZXMiLCJuYiIsImludGVycG9sYXRlIiwibmEiLCJuZXN0IiwiY29udGV4dCIsInJlc2V0IiwicG9zdFByb2Nlc3MiLCJwb3N0UHJvY2Vzc29yTmFtZXMiLCJhcHBseVBvc3RQcm9jZXNzb3IiLCJwb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZCIsImkxOG5SZXNvbHZlZCIsImZvdW5kIiwiX3RoaXM0IiwiZXh0cmFjdGVkIiwiZmFsbGJhY2tOUyIsIm5lZWRzWmVyb1N1ZmZpeExvb2t1cCIsIm9yZGluYWwiLCJzaG91bGRVc2VJbnRsQXBpIiwibmVlZHNDb250ZXh0SGFuZGxpbmciLCJjb2RlcyIsInV0aWxzIiwiaGFzTG9hZGVkTmFtZXNwYWNlIiwiY29kZSIsInBvc3NpYmxlS2V5IiwiZmluYWxLZXlzIiwiYWRkTG9va3VwS2V5cyIsInBsdXJhbFN1ZmZpeCIsInplcm9TdWZmaXgiLCJwbHVyYWxTZXBhcmF0b3IiLCJjb250ZXh0S2V5IiwiY29udGV4dFNlcGFyYXRvciIsInBvcCIsInJldHVybk51bGwiLCJyZXR1cm5FbXB0eVN0cmluZyIsInJlc291cmNlU3RvcmUiLCJvcHRpb24iLCJjYXBpdGFsaXplIiwic3RyaW5nIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJMYW5ndWFnZVV0aWwiLCJzdXBwb3J0ZWRMbmdzIiwiZm9ybWF0TGFuZ3VhZ2VDb2RlIiwic3BlY2lhbENhc2VzIiwibG93ZXJDYXNlTG5nIiwicGFydCIsImNsZWFuQ29kZSIsImxvYWQiLCJub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MiLCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZSIsImNsZWFuZWRMbmciLCJpc1N1cHBvcnRlZENvZGUiLCJsbmdPbmx5Iiwic3VwcG9ydGVkTG5nIiwiZmFsbGJhY2tzIiwiZ2V0U2NyaXB0UGFydEZyb21Db2RlIiwiZmFsbGJhY2tDb2RlIiwiZmFsbGJhY2tDb2RlcyIsImFkZENvZGUiLCJmYyIsInNldHMiLCJuciIsIl9ydWxlc1BsdXJhbHNUeXBlcyIsIm4iLCJOdW1iZXIiLCJkZXByZWNhdGVkSnNvblZlcnNpb25zIiwic3VmZml4ZXNPcmRlciIsInplcm8iLCJvbmUiLCJ0d28iLCJmZXciLCJtYW55Iiwib3RoZXIiLCJjcmVhdGVSdWxlcyIsInJ1bGVzIiwic2V0IiwibnVtYmVycyIsInBsdXJhbHMiLCJQbHVyYWxSZXNvbHZlciIsImNvbXBhdGliaWxpdHlKU09OIiwiSW50bCIsIlBsdXJhbFJ1bGVzIiwiX3VudXNlZCIsInJ1bGUiLCJnZXRSdWxlIiwicmVzb2x2ZWRPcHRpb25zIiwicGx1cmFsQ2F0ZWdvcmllcyIsInNvcnQiLCJwbHVyYWxDYXRlZ29yeTEiLCJwbHVyYWxDYXRlZ29yeTIiLCJwbHVyYWxDYXRlZ29yeSIsInByZXBlbmQiLCJudW1iZXIiLCJzZWxlY3QiLCJnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUiLCJpZHgiLCJub0FicyIsIk1hdGgiLCJhYnMiLCJzaW1wbGlmeVBsdXJhbFN1ZmZpeCIsInJldHVyblN1ZmZpeCIsImluY2x1ZGVzIiwib3duS2V5cyQzIiwiX29iamVjdFNwcmVhZCQzIiwiSW50ZXJwb2xhdG9yIiwiZm9ybWF0IiwiZXNjYXBlVmFsdWUiLCJpT3B0cyIsImVzY2FwZSIsInVzZVJhd1ZhbHVlVG9Fc2NhcGUiLCJwcmVmaXhFc2NhcGVkIiwic3VmZml4RXNjYXBlZCIsImZvcm1hdFNlcGFyYXRvciIsInVuZXNjYXBlUHJlZml4IiwidW5lc2NhcGVTdWZmaXgiLCJuZXN0aW5nUHJlZml4IiwibmVzdGluZ1ByZWZpeEVzY2FwZWQiLCJuZXN0aW5nU3VmZml4IiwibmVzdGluZ1N1ZmZpeEVzY2FwZWQiLCJuZXN0aW5nT3B0aW9uc1NlcGFyYXRvciIsIm1heFJlcGxhY2VzIiwiYWx3YXlzRm9ybWF0IiwicmVzZXRSZWdFeHAiLCJyZWdleHBTdHIiLCJyZWdleHAiLCJyZWdleHBVbmVzY2FwZVN0ciIsInJlZ2V4cFVuZXNjYXBlIiwibmVzdGluZ1JlZ2V4cFN0ciIsInJlcGxhY2VzIiwicmVnZXhTYWZlIiwidmFsIiwiaGFuZGxlRm9ybWF0IiwiaW50ZXJwb2xhdGlvbmtleSIsInRyaW0iLCJmIiwibWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIiwicmVnZXgiLCJzYWZlVmFsdWUiLCJ0b2RvIiwiZXhlYyIsIm1hdGNoZWRWYXIiLCJ0ZW1wIiwibGFzdEluZGV4IiwiY2xvbmVkT3B0aW9ucyIsImhhbmRsZUhhc09wdGlvbnMiLCJpbmhlcml0ZWRPcHRpb25zIiwic2VwIiwib3B0aW9uc1N0cmluZyIsIkpTT04iLCJmb3JtYXR0ZXJzIiwiZG9SZWR1Y2UiLCJlbGVtIiwicmVkdWNlIiwib3duS2V5cyQ0IiwiX29iamVjdFNwcmVhZCQ0IiwiRm9ybWF0dGVyIiwiZm9ybWF0cyIsIk51bWJlckZvcm1hdCIsImN1cnJlbmN5Iiwic3R5bGUiLCJkYXRldGltZSIsIkRhdGVUaW1lRm9ybWF0IiwicmVsYXRpdmV0aW1lIiwiUmVsYXRpdmVUaW1lRm9ybWF0IiwicmFuZ2UiLCJsaXN0IiwiTGlzdEZvcm1hdCIsIl9mb3JtYXQiLCJtZW0iLCJfcGFyc2VGb3JtYXRTdHIiLCJmb3JtYXRTdHIiLCJmb3JtYXROYW1lIiwiZm9ybWF0T3B0aW9ucyIsIm9wdFN0ciIsIm9wdCIsIl9vcHQkc3BsaXQyIiwiaXRlciIsImZyb20iLCJtaW5MZW4iLCJpc05hTiIsInBhcnNlSW50IiwicGFyc2VGb3JtYXRTdHIiLCJmb3JtYXR0ZWQiLCJ2YWxPcHRpb25zIiwiZm9ybWF0UGFyYW1zIiwibG9jYWxlIiwib3duS2V5cyQ1IiwiX29iamVjdFNwcmVhZCQ1IiwiQ29ubmVjdG9yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyIiwiYmFja2VuZCIsInN0b3JlIiwid2FpdGluZ1JlYWRzIiwibWF4UGFyYWxsZWxSZWFkcyIsInJlYWRpbmdDYWxscyIsInN0YXRlIiwicXVldWUiLCJsYW5ndWFnZXMiLCJjYWxsYmFjayIsInRvTG9hZCIsInBlbmRpbmciLCJ0b0xvYWRMYW5ndWFnZXMiLCJ0b0xvYWROYW1lc3BhY2VzIiwiaGFzQWxsTmFtZXNwYWNlcyIsInJlbG9hZCIsInBlbmRpbmdDb3VudCIsImxvYWRlZCIsImVycm9ycyIsImVyciIsImFkZFJlc291cmNlQnVuZGxlIiwicSIsIl9nZXRMYXN0T2ZQYXRoMiIsInJlbW92ZVBlbmRpbmciLCJkb25lIiwibG9hZGVkS2V5cyIsImZjTmFtZSIsInRyaWVkIiwid2FpdCIsIm5leHQiLCJyZWFkIiwic2V0VGltZW91dCIsInF1ZXVlTG9hZCIsImxvYWRPbmUiLCJwcmVwYXJlTG9hZGluZyIsIl90aGlzNSIsImZhbGxiYWNrVmFsdWUiLCJpc1VwZGF0ZSIsImdldCIsImluaXRJbW1lZGlhdGUiLCJwcmVsb2FkIiwicGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMiLCJyZXQiLCJ0RGVzY3JpcHRpb24iLCJ0cmFuc2Zvcm1PcHRpb25zIiwib3duS2V5cyQ2IiwiX29iamVjdFNwcmVhZCQ2Iiwibm9vcCIsImJpbmRNZW1iZXJGdW5jdGlvbnMiLCJpbnN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIkkxOG4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDMiLCJtb2R1bGVzIiwiZXh0ZXJuYWwiLCJpc0luaXRpYWxpemVkIiwiaXNDbG9uZSIsImRlZk9wdHMiLCJjcmVhdGVDbGFzc09uRGVtYW5kIiwiQ2xhc3NPck9iamVjdCIsImZvcm1hdHRlciIsImx1Iiwib24iLCJsYW5ndWFnZURldGVjdG9yIiwiZGV0ZWN0aW9uIiwic3RvcmVBcGkiLCJfdGhpczIkc3RvcmUiLCJzdG9yZUFwaUNoYWluZWQiLCJfdGhpczIkc3RvcmUyIiwiZGVmZXJyZWQiLCJmaW5pc2giLCJpbml0aWFsaXplZFN0b3JlT25jZSIsImNoYW5nZUxhbmd1YWdlIiwidXNlZENhbGxiYWNrIiwiYXBwZW5kIiwicmVzb2x2ZWRMYW5ndWFnZSIsInNldFJlc29sdmVkTGFuZ3VhZ2UiLCJFcnJvciIsImxpIiwibG5nSW5MbmdzIiwiaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zIiwiaXNMYW5ndWFnZUNoYW5naW5nVG8iLCJzZXRMbmdQcm9wcyIsInNldExuZyIsImdldEJlc3RNYXRjaEZyb21Db2RlcyIsImNhY2hlVXNlckxhbmd1YWdlIiwibG9hZFJlc291cmNlcyIsImFzeW5jIiwiZGV0ZWN0Iiwia2V5UHJlZml4IiwiZml4ZWRUIiwib3B0cyIsInJlc3QiLCJyZXN1bHRLZXkiLCJfdGhpcyR0cmFuc2xhdG9yIiwiX3RoaXMkdHJhbnNsYXRvcjIiLCJleGlzdHMiLCJfdGhpczYiLCJsYXN0TG5nIiwibG9hZE5vdFBlbmRpbmciLCJsb2FkU3RhdGUiLCJwcmVjaGVjayIsInByZVJlc3VsdCIsIl90aGlzNyIsInByZWxvYWRlZCIsIm5ld0xuZ3MiLCJfdGhpczgiLCJtZXJnZWRPcHRpb25zIiwiY2xvbmUiLCJtZW1iZXJzVG9Db3B5IiwiY3JlYXRlSW5zdGFuY2UiLCJyZWxvYWRSZXNvdXJjZXMiLCJ1c2UiLCJnZXRGaXhlZFQiLCJzZXREZWZhdWx0TmFtZXNwYWNlIiwibG9hZE5hbWVzcGFjZXMiLCJsb2FkTGFuZ3VhZ2VzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/79.js b/server-data/resources/[phone]/npwd_crypto/web/dist/79.js deleted file mode 100644 index 80cf95367..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/79.js +++ /dev/null @@ -1,76 +0,0 @@ -/*! For license information please see 79.js.LICENSE.txt */ -(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[79,803,576],{6898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>re});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?u(Z,--b):0,g--,10===y&&(g=1,h--),y}function k(){return y=b2||P(y)>3?"":" "}function O(e,t){for(;--t&&k()&&!(y<48||y>102||y>57&&y<65||y>70&&y<97););return C(e,R()+(t<6&&32==E()&&32==k()))}function j(e){for(;k();)switch(y){case e:return b;case 34:case 39:34!==e&&39!==e&&j(y);break;case 40:41===e&&j(e);break;case 92:k()}return b}function I(e,t){for(;k()&&e+y!==57&&(e+y!==84||47!==E()););return"/*"+C(t,b-1)+"*"+i(47===e?e:k())}function N(e){for(;!P(E());)k();return C(e,b)}var z="-ms-",L="-moz-",F="-webkit-",B="comm",_="rule",D="decl",W="@keyframes";function V(e,t){for(var n="",r=f(e),o=0;o6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return l(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+L+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~c(e,"stretch")?G(l(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~c(e,"!important")&&10))){case 107:return l(e,":",":"+F)+e;case 101:return l(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+F+(45===u(e,14)?"inline-":"")+"box$3$1"+F+"$2$3$1"+z+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return F+e+z+l(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return F+e+z+l(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return F+e+z+l(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return F+e+z+e+e}return e}function K(e){return T(q("",null,null,null,[""],e=M(e),0,[0],e))}function q(e,t,n,r,o,a,s,u,d){for(var f=0,h=0,g=s,v=0,b=0,y=0,Z=1,x=1,w=1,C=0,P="",M=o,T=a,j=r,z=P;x;)switch(y=C,C=k()){case 40:if(108!=y&&58==z.charCodeAt(g-1)){-1!=c(z+=l(A(C),"&","&\f"),"&\f")&&(w=-1);break}case 34:case 39:case 91:z+=A(C);break;case 9:case 10:case 13:case 32:z+=$(y);break;case 92:z+=O(R()-1,7);continue;case 47:switch(E()){case 42:case 47:m(X(I(k(),R()),t,n),d);break;default:z+="/"}break;case 123*Z:u[f++]=p(z)*w;case 125*Z:case 59:case 0:switch(C){case 0:case 125:x=0;case 59+h:b>0&&p(z)-g&&m(b>32?Y(z+";",r,n,g-1):Y(l(z," ","")+";",r,n,g-2),d);break;case 59:z+=";";default:if(m(j=U(z,t,n,f,h,o,u,P,M=[],T=[],g),a),123===C)if(0===h)q(z,t,j,j,M,a,g,u,T);else switch(v){case 100:case 109:case 115:q(e,j,j,r&&m(U(e,j,j,0,0,o,u,P,o,M=[],g),T),o,T,g,u,r?M:T);break;default:q(z,j,j,j,[""],T,0,u,T)}}f=h=b=0,Z=w=1,P=z="",g=s;break;case 58:g=1+p(z),b=y;default:if(Z<1)if(123==C)--Z;else if(125==C&&0==Z++&&125==S())continue;switch(z+=i(C),C*Z){case 38:w=h>0?1:(z+="\f",-1);break;case 44:u[f++]=(p(z)-1)*w,w=1;break;case 64:45===E()&&(z+=A(k())),v=E(),h=g=p(P=z+=N(R())),C++;break;case 45:45===y&&2==p(z)&&(Z=0)}}return a}function U(e,t,n,r,i,a,c,u,p,m,h){for(var g=i-1,v=0===i?a:[""],b=f(v),y=0,Z=0,w=0;y0?v[S]+" "+k:l(k,/&\f/g,v[S])))&&(p[w++]=E);return x(e,t,n,0===i?_:u,p,m,h)}function X(e,t,n){return x(e,t,n,B,i(y),d(e,2,-2),0)}function Y(e,t,n,r){return x(e,t,n,D,d(e,0,r),d(e,r+1,-1),r)}var J=function(e,t,n){for(var r=0,o=0;r=o,o=E(),38===r&&12===o&&(t[n]=1),!P(o);)k();return C(e,b)},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(n))&&!r){Q.set(e,!0);for(var o=[],a=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(P(r)){case 0:38===r&&12===E()&&(t[n]=1),e[n]+=J(b-1,t,n);break;case 2:e[n]+=A(r);break;case 4:if(44===r){e[++n]=58===E()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=k());return e}(M(e),t))}(t,o),s=n.props,l=0,c=0;l-1&&!e.return)switch(e.type){case D:e.return=G(e.value,e.length);break;case W:return V([w(e,{value:l(e.value,"@","@"+F)})],r);case _:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return V([w(e,{props:[l(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return V([w(e,{props:[l(t,/:(plac\w+)/,":-webkit-input-$1")]}),w(e,{props:[l(t,/:(plac\w+)/,":-moz-$1")]}),w(e,{props:[l(t,/:(plac\w+)/,z+"input-$1")]})],r)}return""}))}}];const re=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o,i,a=e.stylisPlugins||ne,s={},l=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n{"use strict";n.d(t,{Z:()=>r});const r=function(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}},4880:(e,t,n)=>{"use strict";n.d(t,{C:()=>a,T:()=>l,w:()=>s});var r=n(2950),o=n(6898),i=(n(9729),(0,r.createContext)("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null)),a=i.Provider,s=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(i);return e(t,o,n)}))},l=(0,r.createContext)({});r.useInsertionEffect&&r.useInsertionEffect},9729:(e,t,n)=>{"use strict";n.d(t,{O:()=>h});const r=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var i=n(5042),a=/[A-Z]|^ms/g,s=/_EMO_([^_]+?)_([^]*?)_EMO_/g,l=function(e){return 45===e.charCodeAt(1)},c=function(e){return null!=e&&"boolean"!=typeof e},u=(0,i.Z)((function(e){return l(e)?e:e.replace(a,"-$&").toLowerCase()})),d=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(s,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===o[e]||l(e)||"number"!=typeof t||0===t?t:t+"px"};function p(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)f={name:r.name,styles:r.styles,next:f},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o{"use strict";n.d(t,{Z:()=>y});var r=n(2950),o=n(7462),i=n(5042),a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;const s=(0,i.Z)((function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));var l=n(4880);function c(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}var u=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},d=n(9729),p=s,f=function(e){return"theme"!==e},m=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?p:f},h=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},g=r.useInsertionEffect?r.useInsertionEffect:function(e){e()},v=function(e){var t,n=e.cache,r=e.serialized,o=e.isStringTag;return u(n,r,o),t=function(){return function(e,t,n){u(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}}(n,r,o)},g(t),null};var b=function e(t,n){var i,a,s=t.__emotion_real===t,u=s&&t.__emotion_base||t;void 0!==n&&(i=n.label,a=n.target);var p=h(t,n,s),f=p||m(u),g=!f("as");return function(){var b=arguments,y=s&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==i&&y.push("label:"+i+";"),null==b[0]||void 0===b[0].raw)y.push.apply(y,b);else{y.push(b[0][0]);for(var Z=b.length,x=1;x{"use strict";function r(e,t,n){const r={};return Object.keys(e).forEach((o=>{r[o]=e[o].reduce(((e,r)=>(r&&(n&&n[r]&&e.push(n[r]),e.push(t(r))),e)),[]).join(" ")})),r}n.d(t,{Z:()=>r})},9981:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>e,o=(()=>{let e=r;return{configure(t){e=t},generate:t=>e(t),reset(){e=r}}})()},8979:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(9981);const o={active:"Mui-active",checked:"Mui-checked",completed:"Mui-completed",disabled:"Mui-disabled",error:"Mui-error",expanded:"Mui-expanded",focused:"Mui-focused",focusVisible:"Mui-focusVisible",required:"Mui-required",selected:"Mui-selected"};function i(e,t){return o[t]||`${r.Z.generate(e)}-${t}`}},6087:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(8979);function o(e,t){const n={};return t.forEach((t=>{n[t]=(0,r.Z)(e,t)})),n}},8442:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(e){return"string"==typeof e}},3334:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"}),"AccountBalanceWallet");t.Z=a},6857:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"M11.8 10.9c-2.27-.59-3-1.2-3-2.15 0-1.09 1.01-1.85 2.7-1.85 1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-1.94.42-3.5 1.68-3.5 3.61 0 2.31 1.91 3.46 4.7 4.13 2.5.6 3 1.48 3 2.41 0 .69-.49 1.79-2.7 1.79-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c1.95-.37 3.5-1.5 3.5-3.55 0-2.84-2.43-3.81-4.7-4.4z"}),"AttachMoney");t.Z=a},9547:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"M17.06 11.57c.59-.69.94-1.59.94-2.57 0-1.86-1.27-3.43-3-3.87V3h-2v2h-2V3H9v2H6v2h2v10H6v2h3v2h2v-2h2v2h2v-2c2.21 0 4-1.79 4-4 0-1.45-.78-2.73-1.94-3.43zM10 7h4c1.1 0 2 .9 2 2s-.9 2-2 2h-4V7zm5 10h-5v-4h5c1.1 0 2 .9 2 2s-.9 2-2 2z"}),"CurrencyBitcoin");t.Z=a},5542:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"M12.89 11.1c-1.78-.59-2.64-.96-2.64-1.9 0-1.02 1.11-1.39 1.81-1.39 1.31 0 1.79.99 1.9 1.34l1.58-.67c-.15-.45-.82-1.92-2.54-2.24V5h-2v1.26c-2.48.56-2.49 2.86-2.49 2.96 0 2.27 2.25 2.91 3.35 3.31 1.58.56 2.28 1.07 2.28 2.03 0 1.13-1.05 1.61-1.98 1.61-1.82 0-2.34-1.87-2.4-2.09l-1.66.67c.63 2.19 2.28 2.78 2.9 2.96V19h2v-1.24c.4-.09 2.9-.59 2.9-3.22 0-1.39-.61-2.61-3.01-3.44zM3 21H1v-6h6v2H4.52c1.61 2.41 4.36 4 7.48 4 4.97 0 9-4.03 9-9h2c0 6.08-4.92 11-11 11-3.72 0-7.01-1.85-9-4.67V21zm-2-9C1 5.92 5.92 1 12 1c3.72 0 7.01 1.85 9 4.67V3h2v6h-6V7h2.48C17.87 4.59 15.12 3 12 3c-4.97 0-9 4.03-9 9H1z"}),"CurrencyExchange");t.Z=a},62:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"m21.41 11.41-8.83-8.83c-.37-.37-.88-.58-1.41-.58H4c-1.1 0-2 .9-2 2v7.17c0 .53.21 1.04.59 1.41l8.83 8.83c.78.78 2.05.78 2.83 0l7.17-7.17c.78-.78.78-2.04-.01-2.83zM6.5 8C5.67 8 5 7.33 5 6.5S5.67 5 6.5 5 8 5.67 8 6.5 7.33 8 6.5 8z"}),"Sell");t.Z=a},5414:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"m19 15-6 6-1.42-1.42L15.17 16H4V4h2v10h9.17l-3.59-3.58L13 9l6 6z"}),"SubdirectoryArrowRight");t.Z=a},1233:(e,t,n)=>{"use strict";var r=n(4836);t.Z=void 0;var o=r(n(4938)),i=n(5893),a=(0,o.default)((0,i.jsx)("path",{d:"M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"}),"Timeline");t.Z=a},4938:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(55)},442:(e,t,n)=>{"use strict";n.d(t,{Z:()=>z});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(1796),c=n(7709),u=n(4368),d=n(8216),p=n(6501),f=n(8979),m=n(6087);function h(e){return(0,f.Z)("MuiAlert",e)}const g=(0,m.Z)("MuiAlert",["root","action","icon","message","filled","filledSuccess","filledInfo","filledWarning","filledError","outlined","outlinedSuccess","outlinedInfo","outlinedWarning","outlinedError","standard","standardSuccess","standardInfo","standardWarning","standardError"]);var v=n(6529);function b(e){return(0,f.Z)("MuiIconButton",e)}const y=(0,m.Z)("MuiIconButton",["root","disabled","colorInherit","colorPrimary","colorSecondary","edgeStart","edgeEnd","sizeSmall","sizeMedium","sizeLarge"]);var Z=n(5893);const x=["edge","children","className","color","disabled","disableFocusRipple","size"],w=(0,c.ZP)(v.Z,{name:"MuiIconButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"default"!==n.color&&t[`color${(0,d.Z)(n.color)}`],n.edge&&t[`edge${(0,d.Z)(n.edge)}`],t[`size${(0,d.Z)(n.size)}`]]}})((({theme:e,ownerState:t})=>(0,o.Z)({textAlign:"center",flex:"0 0 auto",fontSize:e.typography.pxToRem(24),padding:8,borderRadius:"50%",overflow:"visible",color:e.palette.action.active,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest})},!t.disableRipple&&{"&:hover":{backgroundColor:(0,l.Fq)(e.palette.action.active,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"start"===t.edge&&{marginLeft:"small"===t.size?-3:-12},"end"===t.edge&&{marginRight:"small"===t.size?-3:-12})),(({theme:e,ownerState:t})=>(0,o.Z)({},"inherit"===t.color&&{color:"inherit"},"inherit"!==t.color&&"default"!==t.color&&(0,o.Z)({color:e.palette[t.color].main},!t.disableRipple&&{"&:hover":{backgroundColor:(0,l.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}}),"small"===t.size&&{padding:5,fontSize:e.typography.pxToRem(18)},"large"===t.size&&{padding:12,fontSize:e.typography.pxToRem(28)},{[`&.${y.disabled}`]:{backgroundColor:"transparent",color:e.palette.action.disabled}}))),S=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiIconButton"}),{edge:i=!1,children:l,className:c,color:p="default",disabled:f=!1,disableFocusRipple:m=!1,size:h="medium"}=n,g=(0,r.Z)(n,x),v=(0,o.Z)({},n,{edge:i,color:p,disabled:f,disableFocusRipple:m,size:h}),y=(e=>{const{classes:t,disabled:n,color:r,edge:o,size:i}=e,a={root:["root",n&&"disabled","default"!==r&&`color${(0,d.Z)(r)}`,o&&`edge${(0,d.Z)(o)}`,`size${(0,d.Z)(i)}`]};return(0,s.Z)(a,b,t)})(v);return(0,Z.jsx)(w,(0,o.Z)({className:(0,a.Z)(y.root,c),centerRipple:!0,focusRipple:!m,disabled:f,ref:t,ownerState:v},g,{children:l}))}));var k=n(5949);const E=(0,k.Z)((0,Z.jsx)("path",{d:"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"}),"SuccessOutlined"),R=(0,k.Z)((0,Z.jsx)("path",{d:"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"}),"ReportProblemOutlined"),C=(0,k.Z)((0,Z.jsx)("path",{d:"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"ErrorOutline"),P=(0,k.Z)((0,Z.jsx)("path",{d:"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z"}),"InfoOutlined"),M=(0,k.Z)((0,Z.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");var T;const A=["action","children","className","closeText","color","icon","iconMapping","onClose","role","severity","variant"],$=(0,c.ZP)(p.Z,{name:"MuiAlert",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,d.Z)(n.color||n.severity)}`]]}})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?l._j:l.$n,r="light"===e.palette.mode?l.$n:l._j,i=t.color||t.severity;return(0,o.Z)({},e.typography.body2,{borderRadius:e.shape.borderRadius,backgroundColor:"transparent",display:"flex",padding:"6px 16px"},i&&"standard"===t.variant&&{color:n(e.palette[i].light,.6),backgroundColor:r(e.palette[i].light,.9),[`& .${g.icon}`]:{color:"dark"===e.palette.mode?e.palette[i].main:e.palette[i].light}},i&&"outlined"===t.variant&&{color:n(e.palette[i].light,.6),border:`1px solid ${e.palette[i].light}`,[`& .${g.icon}`]:{color:"dark"===e.palette.mode?e.palette[i].main:e.palette[i].light}},i&&"filled"===t.variant&&{color:"#fff",fontWeight:e.typography.fontWeightMedium,backgroundColor:"dark"===e.palette.mode?e.palette[i].dark:e.palette[i].main})})),O=(0,c.ZP)("div",{name:"MuiAlert",slot:"Icon",overridesResolver:(e,t)=>t.icon})({marginRight:12,padding:"7px 0",display:"flex",fontSize:22,opacity:.9}),j=(0,c.ZP)("div",{name:"MuiAlert",slot:"Message",overridesResolver:(e,t)=>t.message})({padding:"8px 0"}),I=(0,c.ZP)("div",{name:"MuiAlert",slot:"Action",overridesResolver:(e,t)=>t.action})({display:"flex",alignItems:"flex-start",padding:"4px 0 0 16px",marginLeft:"auto",marginRight:-8}),N={success:(0,Z.jsx)(E,{fontSize:"inherit"}),warning:(0,Z.jsx)(R,{fontSize:"inherit"}),error:(0,Z.jsx)(C,{fontSize:"inherit"}),info:(0,Z.jsx)(P,{fontSize:"inherit"})},z=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiAlert"}),{action:i,children:l,className:c,closeText:p="Close",color:f,icon:m,iconMapping:g=N,onClose:v,role:b="alert",severity:y="success",variant:x="standard"}=n,w=(0,r.Z)(n,A),k=(0,o.Z)({},n,{color:f,severity:y,variant:x}),E=(e=>{const{variant:t,color:n,severity:r,classes:o}=e,i={root:["root",`${t}${(0,d.Z)(n||r)}`,`${t}`],icon:["icon"],message:["message"],action:["action"]};return(0,s.Z)(i,h,o)})(k);return(0,Z.jsxs)($,(0,o.Z)({role:b,square:!0,elevation:0,ownerState:k,className:(0,a.Z)(E.root,c),ref:t},w,{children:[!1!==m?(0,Z.jsx)(O,{ownerState:k,className:E.icon,children:m||g[y]||N[y]}):null,(0,Z.jsx)(j,{ownerState:k,className:E.message,children:l}),null!=i?(0,Z.jsx)(I,{className:E.action,children:i}):null,null==i&&v?(0,Z.jsx)(I,{ownerState:k,className:E.action,children:(0,Z.jsx)(S,{size:"small","aria-label":p,title:p,color:"inherit",onClick:v,children:T||(T=(0,Z.jsx)(M,{fontSize:"small"}))})}):null]}))}))},7109:(e,t,n)=>{"use strict";n.d(t,{Z:()=>y});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(5949),d=n(5893);const p=(0,u.Z)((0,d.jsx)("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}),"Person");var f=n(8979);function m(e){return(0,f.Z)("MuiAvatar",e)}(0,n(6087).Z)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);const h=["alt","children","className","component","imgProps","sizes","src","srcSet","variant"],g=(0,l.ZP)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],n.colorDefault&&t.colorDefault]}})((({theme:e,ownerState:t})=>(0,o.Z)({position:"relative",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:40,height:40,fontFamily:e.typography.fontFamily,fontSize:e.typography.pxToRem(20),lineHeight:1,borderRadius:"50%",overflow:"hidden",userSelect:"none"},"rounded"===t.variant&&{borderRadius:e.shape.borderRadius},"square"===t.variant&&{borderRadius:0},t.colorDefault&&{color:e.palette.background.default,backgroundColor:"light"===e.palette.mode?e.palette.grey[400]:e.palette.grey[600]}))),v=(0,l.ZP)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(e,t)=>t.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),b=(0,l.ZP)(p,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(e,t)=>t.fallback})({width:"75%",height:"75%"}),y=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiAvatar"}),{alt:l,children:u,className:p,component:f="div",imgProps:y,sizes:Z,src:x,srcSet:w,variant:S="circular"}=n,k=(0,r.Z)(n,h);let E=null;const R=function({crossOrigin:e,referrerPolicy:t,src:n,srcSet:r}){const[o,a]=i.useState(!1);return i.useEffect((()=>{if(!n&&!r)return;a(!1);let o=!0;const i=new Image;return i.onload=()=>{o&&a("loaded")},i.onerror=()=>{o&&a("error")},i.crossOrigin=e,i.referrerPolicy=t,i.src=n,r&&(i.srcset=r),()=>{o=!1}}),[e,t,n,r]),o}((0,o.Z)({},y,{src:x,srcSet:w})),C=x||w,P=C&&"error"!==R,M=(0,o.Z)({},n,{colorDefault:!P,component:f,variant:S}),T=(e=>{const{classes:t,variant:n,colorDefault:r}=e,o={root:["root",n,r&&"colorDefault"],img:["img"],fallback:["fallback"]};return(0,s.Z)(o,m,t)})(M);return E=P?(0,d.jsx)(v,(0,o.Z)({alt:l,src:x,srcSet:w,sizes:Z,ownerState:M,className:T.img},y)):null!=u?u:C&&l?l[0]:(0,d.jsx)(b,{className:T.fallback}),(0,d.jsx)(g,(0,o.Z)({as:f,ownerState:M,className:(0,a.Z)(T.root,p),ref:t},k,{children:E}))}))},4172:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(7462),o=n(3366),i=n(2950),a=(n(6607),n(6010)),s=n(7192),l=n(7709),c=n(4368),u=n(8979);function d(e){return(0,u.Z)("MuiBottomNavigation",e)}(0,n(6087).Z)("MuiBottomNavigation",["root"]);var p=n(5893);const f=["children","className","component","onChange","showLabels","value"],m=(0,l.ZP)("div",{name:"MuiBottomNavigation",slot:"Root",overridesResolver:(e,t)=>t.root})((({theme:e})=>({display:"flex",justifyContent:"center",height:56,backgroundColor:e.palette.background.paper}))),h=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiBottomNavigation"}),{children:l,className:u,component:h="div",onChange:g,showLabels:v=!1,value:b}=n,y=(0,o.Z)(n,f),Z=(0,r.Z)({},n,{component:h,showLabels:v}),x=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"]},d,t)})(Z);return(0,p.jsx)(m,(0,r.Z)({as:h,className:(0,a.Z)(x.root,u),ref:t,ownerState:Z},y,{children:i.Children.map(l,((e,t)=>{if(!i.isValidElement(e))return null;const n=void 0===e.props.value?t:e.props.value;return i.cloneElement(e,{selected:n===b,showLabel:void 0!==e.props.showLabel?e.props.showLabel:v,value:n,onChange:g})}))}))}))},2004:(e,t,n)=>{"use strict";n.d(t,{Z:()=>b});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(6529),d=n(8979);function p(e){return(0,d.Z)("MuiBottomNavigationAction",e)}const f=(0,n(6087).Z)("MuiBottomNavigationAction",["root","iconOnly","selected","label"]);var m=n(5893);const h=["className","icon","label","onChange","onClick","selected","showLabel","value"],g=(0,l.ZP)(u.Z,{name:"MuiBottomNavigationAction",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.showLabel&&!n.selected&&t.iconOnly]}})((({theme:e,ownerState:t})=>(0,o.Z)({transition:e.transitions.create(["color","padding-top"],{duration:e.transitions.duration.short}),padding:"6px 12px 8px",minWidth:80,maxWidth:168,color:e.palette.text.secondary,flexDirection:"column",flex:"1"},!t.showLabel&&!t.selected&&{paddingTop:16},{[`&.${f.selected}`]:{paddingTop:6,color:e.palette.primary.main}}))),v=(0,l.ZP)("span",{name:"MuiBottomNavigationAction",slot:"Label",overridesResolver:(e,t)=>t.label})((({theme:e,ownerState:t})=>(0,o.Z)({fontFamily:e.typography.fontFamily,fontSize:e.typography.pxToRem(12),opacity:1,transition:"font-size 0.2s, opacity 0.2s",transitionDelay:"0.1s"},!t.showLabel&&!t.selected&&{opacity:0,transitionDelay:"0s"},{[`&.${f.selected}`]:{fontSize:e.typography.pxToRem(14)}}))),b=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiBottomNavigationAction"}),{className:i,icon:l,label:u,onChange:d,onClick:f,value:b}=n,y=(0,r.Z)(n,h),Z=n,x=(e=>{const{classes:t,showLabel:n,selected:r}=e,o={root:["root",!n&&!r&&"iconOnly",r&&"selected"],label:["label",!n&&!r&&"iconOnly",r&&"selected"]};return(0,s.Z)(o,p,t)})(Z);return(0,m.jsxs)(g,(0,o.Z)({ref:t,className:(0,a.Z)(x.root,i),focusRipple:!0,onClick:e=>{d&&d(e,b),f&&f(e)},ownerState:Z},y,{children:[l,(0,m.jsx)(v,{className:x.label,ownerState:Z,children:u})]}))}))},6914:(e,t,n)=>{"use strict";n.d(t,{Z:()=>S});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(1796),c=n(7709),u=n(4368),d=n(6529),p=n(8216),f=n(8979);function m(e){return(0,f.Z)("MuiButton",e)}const h=(0,n(6087).Z)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","contained","containedInherit","containedPrimary","containedSecondary","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),g=i.createContext({});var v=n(5893);const b=["children","className","color","component","disabled","disableElevation","disableFocusRipple","disableRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],y=e=>(0,o.Z)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),Z=(0,c.ZP)(d.Z,{shouldForwardProp:e=>(0,c.FO)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`${n.variant}${(0,p.Z)(n.color)}`],t[`size${(0,p.Z)(n.size)}`],t[`${n.variant}Size${(0,p.Z)(n.size)}`],"inherit"===n.color&&t.colorInherit,n.disableElevation&&t.disableElevation,n.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>(0,o.Z)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:e.shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,o.Z)({textDecoration:"none",backgroundColor:(0,l.Fq)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:(0,l.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${e.palette[t.color].main}`,backgroundColor:(0,l.Fq)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.palette.grey.A100,boxShadow:e.shadows[4],"@media (hover: none)":{boxShadow:e.shadows[2],backgroundColor:e.palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.palette[t.color].dark,"@media (hover: none)":{backgroundColor:e.palette[t.color].main}}),"&:active":(0,o.Z)({},"contained"===t.variant&&{boxShadow:e.shadows[8]}),[`&.${h.focusVisible}`]:(0,o.Z)({},"contained"===t.variant&&{boxShadow:e.shadows[6]}),[`&.${h.disabled}`]:(0,o.Z)({color:e.palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${e.palette.action.disabledBackground}`},"outlined"===t.variant&&"secondary"===t.color&&{border:`1px solid ${e.palette.action.disabled}`},"contained"===t.variant&&{color:e.palette.action.disabled,boxShadow:e.shadows[0],backgroundColor:e.palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:e.palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid "+("light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)")},"outlined"===t.variant&&"inherit"!==t.color&&{color:e.palette[t.color].main,border:`1px solid ${(0,l.Fq)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.palette.getContrastText(e.palette.grey[300]),backgroundColor:e.palette.grey[300],boxShadow:e.shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:e.palette[t.color].contrastText,backgroundColor:e.palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${h.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${h.disabled}`]:{boxShadow:"none"}})),x=(0,c.ZP)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.startIcon,t[`iconSize${(0,p.Z)(n.size)}`]]}})((({ownerState:e})=>(0,o.Z)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},y(e)))),w=(0,c.ZP)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.endIcon,t[`iconSize${(0,p.Z)(n.size)}`]]}})((({ownerState:e})=>(0,o.Z)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},y(e)))),S=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiButton"}),{className:l,color:c,disabled:d,disableElevation:f,disableFocusRipple:h,disableRipple:y,fullWidth:S,size:k,variant:E}=i.useContext(g),{children:R,className:C,color:P,component:M="button",disabled:T,disableElevation:A,disableFocusRipple:$,disableRipple:O,endIcon:j,focusVisibleClassName:I,fullWidth:N,size:z,startIcon:L,type:F,variant:B}=n,_=(0,r.Z)(n,b),D=P||c||"primary",W=T||d||!1,V=A||f||!1,H=$||h||!1,G=N||S||!1,K=z||k||"medium",q=B||E||"text",U=O||y||!1,X=(0,o.Z)({},n,{color:D,component:M,disabled:W,disableElevation:V,disableFocusRipple:H,fullWidth:G,size:K,type:F,variant:q}),Y=(e=>{const{color:t,disableElevation:n,fullWidth:r,size:i,variant:a,classes:l}=e,c={root:["root",a,`${a}${(0,p.Z)(t)}`,`size${(0,p.Z)(i)}`,`${a}Size${(0,p.Z)(i)}`,"inherit"===t&&"colorInherit",n&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,p.Z)(i)}`],endIcon:["endIcon",`iconSize${(0,p.Z)(i)}`]},u=(0,s.Z)(c,m,l);return(0,o.Z)({},l,u)})(X),J=L&&(0,v.jsx)(x,{className:Y.startIcon,ownerState:X,children:L}),Q=j&&(0,v.jsx)(w,{className:Y.endIcon,ownerState:X,children:j});return(0,v.jsxs)(Z,(0,o.Z)({ownerState:X,className:(0,a.Z)(C,l),component:M,disabled:W,disableRipple:U,focusRipple:!H,focusVisibleClassName:(0,a.Z)(Y.focusVisible,I),ref:t,type:F},_,{classes:Y,children:[J,R,Q]}))}))},6529:(e,t,n)=>{"use strict";n.d(t,{Z:()=>G});var r=n(7462),o=n(3366),i=n(2950),a=n.n(i),s=n(6010),l=n(7192),c=n(7709),u=n(4368),d=n(1705),p=n(2068),f=n(3511),m=n(7326),h=n(4578),g=n(220);function v(e,t){var n=Object.create(null);return e&&i.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,i.isValidElement)(e)?t(e):e}(e)})),n}function b(e,t,n){return null!=n[t]?n[t]:e.props[t]}function y(e,t,n){var r=v(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var s={};for(var l in t){if(o[l])for(r=0;re;const I=E(T||(T=j` - 0% { - transform: scale(0); - opacity: 0.1; - } - - 100% { - transform: scale(1); - opacity: 0.3; - } -`)),N=E(A||(A=j` - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -`)),z=E($||($=j` - 0% { - transform: scale(1); - } - - 50% { - transform: scale(0.92); - } - - 100% { - transform: scale(1); - } -`)),L=(0,c.ZP)("span",{name:"MuiTouchRipple",slot:"Root",skipSx:!0})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),F=(0,c.ZP)((function(e){const{className:t,classes:n,pulsate:r=!1,rippleX:o,rippleY:a,rippleSize:l,in:c,onExited:u,timeout:d}=e,[p,f]=i.useState(!1),m=(0,s.Z)(t,n.ripple,n.rippleVisible,r&&n.ripplePulsate),h={width:l,height:l,top:-l/2+a,left:-l/2+o},g=(0,s.Z)(n.child,p&&n.childLeaving,r&&n.childPulsate);return c||p||f(!0),i.useEffect((()=>{if(!c&&null!=u){const e=setTimeout(u,d);return()=>{clearTimeout(e)}}}),[u,c,d]),(0,R.jsx)("span",{className:m,style:h,children:(0,R.jsx)("span",{className:g})})}),{name:"MuiTouchRipple",slot:"Ripple"})(O||(O=j` - opacity: 0; - position: absolute; - - &.${0} { - opacity: 0.3; - transform: scale(1); - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - &.${0} { - animation-duration: ${0}ms; - } - - & .${0} { - opacity: 1; - display: block; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: currentColor; - } - - & .${0} { - opacity: 0; - animation-name: ${0}; - animation-duration: ${0}ms; - animation-timing-function: ${0}; - } - - & .${0} { - position: absolute; - /* @noflip */ - left: 0px; - top: 0; - animation-name: ${0}; - animation-duration: 2500ms; - animation-timing-function: ${0}; - animation-iteration-count: infinite; - animation-delay: 200ms; - } -`),P.rippleVisible,I,550,(({theme:e})=>e.transitions.easing.easeInOut),P.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),P.child,P.childLeaving,N,550,(({theme:e})=>e.transitions.easing.easeInOut),P.childPulsate,z,(({theme:e})=>e.transitions.easing.easeInOut)),B=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiTouchRipple"}),{center:a=!1,classes:l={},className:c}=n,d=(0,o.Z)(n,M),[p,f]=i.useState([]),m=i.useRef(0),h=i.useRef(null);i.useEffect((()=>{h.current&&(h.current(),h.current=null)}),[p]);const g=i.useRef(!1),v=i.useRef(null),b=i.useRef(null),y=i.useRef(null);i.useEffect((()=>()=>{clearTimeout(v.current)}),[]);const Z=i.useCallback((e=>{const{pulsate:t,rippleX:n,rippleY:r,rippleSize:o,cb:i}=e;f((e=>[...e,(0,R.jsx)(F,{classes:{ripple:(0,s.Z)(l.ripple,P.ripple),rippleVisible:(0,s.Z)(l.rippleVisible,P.rippleVisible),ripplePulsate:(0,s.Z)(l.ripplePulsate,P.ripplePulsate),child:(0,s.Z)(l.child,P.child),childLeaving:(0,s.Z)(l.childLeaving,P.childLeaving),childPulsate:(0,s.Z)(l.childPulsate,P.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:o},m.current)])),m.current+=1,h.current=i}),[l]),x=i.useCallback(((e={},t={},n)=>{const{pulsate:r=!1,center:o=a||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===e.type&&g.current)return void(g.current=!1);"touchstart"===e.type&&(g.current=!0);const s=i?null:y.current,l=s?s.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,u,d;if(o||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),u=Math.round(l.height/2);else{const{clientX:t,clientY:n}=e.touches?e.touches[0]:e;c=Math.round(t-l.left),u=Math.round(n-l.top)}if(o)d=Math.sqrt((2*l.width**2+l.height**2)/3),d%2==0&&(d+=1);else{const e=2*Math.max(Math.abs((s?s.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((s?s.clientHeight:0)-u),u)+2;d=Math.sqrt(e**2+t**2)}e.touches?null===b.current&&(b.current=()=>{Z({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})},v.current=setTimeout((()=>{b.current&&(b.current(),b.current=null)}),80)):Z({pulsate:r,rippleX:c,rippleY:u,rippleSize:d,cb:n})}),[a,Z]),S=i.useCallback((()=>{x({},{pulsate:!0})}),[x]),k=i.useCallback(((e,t)=>{if(clearTimeout(v.current),"touchend"===e.type&&b.current)return b.current(),b.current=null,void(v.current=setTimeout((()=>{k(e,t)})));b.current=null,f((e=>e.length>0?e.slice(1):e)),h.current=t}),[]);return i.useImperativeHandle(t,(()=>({pulsate:S,start:x,stop:k})),[S,x,k]),(0,R.jsx)(L,(0,r.Z)({className:(0,s.Z)(l.root,P.root,c),ref:y},d,{children:(0,R.jsx)(w,{component:null,exit:!0,children:p})}))}));var _=n(8979);function D(e){return(0,_.Z)("MuiButtonBase",e)}const W=(0,C.Z)("MuiButtonBase",["root","disabled","focusVisible"]),V=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","type"],H=(0,c.ZP)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${W.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),G=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiButtonBase"}),{action:a,centerRipple:c=!1,children:m,className:h,component:g="button",disabled:v=!1,disableRipple:b=!1,disableTouchRipple:y=!1,focusRipple:Z=!1,LinkComponent:x="a",onBlur:w,onClick:S,onContextMenu:k,onDragLeave:E,onFocus:C,onFocusVisible:P,onKeyDown:M,onKeyUp:T,onMouseDown:A,onMouseLeave:$,onMouseUp:O,onTouchEnd:j,onTouchMove:I,onTouchStart:N,tabIndex:z=0,TouchRippleProps:L,type:F}=n,_=(0,o.Z)(n,V),W=i.useRef(null),G=i.useRef(null),{isFocusVisibleRef:K,onFocus:q,onBlur:U,ref:X}=(0,f.Z)(),[Y,J]=i.useState(!1);function Q(e,t,n=y){return(0,p.Z)((r=>(t&&t(r),!n&&G.current&&G.current[e](r),!0)))}v&&Y&&J(!1),i.useImperativeHandle(a,(()=>({focusVisible:()=>{J(!0),W.current.focus()}})),[]),i.useEffect((()=>{Y&&Z&&!b&&G.current.pulsate()}),[b,Z,Y]);const ee=Q("start",A),te=Q("stop",k),ne=Q("stop",E),re=Q("stop",O),oe=Q("stop",(e=>{Y&&e.preventDefault(),$&&$(e)})),ie=Q("start",N),ae=Q("stop",j),se=Q("stop",I),le=Q("stop",(e=>{U(e),!1===K.current&&J(!1),w&&w(e)}),!1),ce=(0,p.Z)((e=>{W.current||(W.current=e.currentTarget),q(e),!0===K.current&&(J(!0),P&&P(e)),C&&C(e)})),ue=()=>{const e=W.current;return g&&"button"!==g&&!("A"===e.tagName&&e.href)},de=i.useRef(!1),pe=(0,p.Z)((e=>{Z&&!de.current&&Y&&G.current&&" "===e.key&&(de.current=!0,G.current.stop(e,(()=>{G.current.start(e)}))),e.target===e.currentTarget&&ue()&&" "===e.key&&e.preventDefault(),M&&M(e),e.target===e.currentTarget&&ue()&&"Enter"===e.key&&!v&&(e.preventDefault(),S&&S(e))})),fe=(0,p.Z)((e=>{Z&&" "===e.key&&G.current&&Y&&!e.defaultPrevented&&(de.current=!1,G.current.stop(e,(()=>{G.current.pulsate(e)}))),T&&T(e),S&&e.target===e.currentTarget&&ue()&&" "===e.key&&!e.defaultPrevented&&S(e)}));let me=g;"button"===me&&(_.href||_.to)&&(me=x);const he={};"button"===me?(he.type=void 0===F?"button":F,he.disabled=v):(_.href||_.to||(he.role="button"),v&&(he["aria-disabled"]=v));const ge=(0,d.Z)(X,W),ve=(0,d.Z)(t,ge),[be,ye]=i.useState(!1);i.useEffect((()=>{ye(!0)}),[]);const Ze=be&&!b&&!v,xe=(0,r.Z)({},n,{centerRipple:c,component:g,disabled:v,disableRipple:b,disableTouchRipple:y,focusRipple:Z,tabIndex:z,focusVisible:Y}),we=(e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,i={root:["root",t&&"disabled",n&&"focusVisible"]},a=(0,l.Z)(i,D,o);return n&&r&&(a.root+=` ${r}`),a})(xe);return(0,R.jsxs)(H,(0,r.Z)({as:me,className:(0,s.Z)(we.root,h),ownerState:xe,onBlur:le,onClick:S,onContextMenu:te,onFocus:ce,onKeyDown:pe,onKeyUp:fe,onMouseDown:ee,onMouseLeave:oe,onMouseUp:re,onDragLeave:ne,onTouchEnd:ae,onTouchMove:se,onTouchStart:ie,ref:ve,tabIndex:v?-1:z,type:F},he,_,{children:[m,Ze?(0,R.jsx)(B,(0,r.Z)({ref:G,center:c},L)):null]}))}))},6123:(e,t,n)=>{"use strict";n.d(t,{Z:()=>pe});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7579),c=n(8216),u=n(8442),d=n(67),p=n(7094),f=n(3633),m=n(9064),h=n(2181),g=n(6600),v=n(7960);const b=i.forwardRef((function(e,t){const{children:n,container:r,disablePortal:o=!1}=e,[a,s]=i.useState(null),l=(0,d.Z)(i.isValidElement(n)?n.ref:null,t);return(0,g.Z)((()=>{o||s(function(e){return"function"==typeof e?e():e}(r)||document.body)}),[r,o]),(0,g.Z)((()=>{if(a&&!o)return(0,v.Z)(t,a),()=>{(0,v.Z)(t,null)}}),[t,a,o]),o?i.isValidElement(n)?i.cloneElement(n,{ref:l}):n:a?h.createPortal(n,a):a}));var y=n(8290);function Z(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function x(e){return parseInt((0,y.Z)(e).getComputedStyle(e).paddingRight,10)||0}function w(e,t,n,r=[],o){const i=[t,n,...r],a=["TEMPLATE","SCRIPT","STYLE"];[].forEach.call(e.children,(e=>{-1===i.indexOf(e)&&-1===a.indexOf(e.tagName)&&Z(e,o)}))}function S(e,t){let n=-1;return e.some(((e,r)=>!!t(e)&&(n=r,!0))),n}var k=n(5893);const E=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function R(e){const t=[],n=[];return Array.from(e.querySelectorAll(E)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex"),10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function C(){return!0}const P=function(e){const{children:t,disableAutoFocus:n=!1,disableEnforceFocus:r=!1,disableRestoreFocus:o=!1,getTabbable:a=R,isEnabled:s=C,open:l}=e,c=i.useRef(),u=i.useRef(null),f=i.useRef(null),m=i.useRef(null),h=i.useRef(null),g=i.useRef(!1),v=i.useRef(null),b=(0,d.Z)(t.ref,v),y=i.useRef(null);i.useEffect((()=>{l&&v.current&&(g.current=!n)}),[n,l]),i.useEffect((()=>{if(!l||!v.current)return;const e=(0,p.Z)(v.current);return v.current.contains(e.activeElement)||(v.current.hasAttribute("tabIndex")||v.current.setAttribute("tabIndex",-1),g.current&&v.current.focus()),()=>{o||(m.current&&m.current.focus&&(c.current=!0,m.current.focus()),m.current=null)}}),[l]),i.useEffect((()=>{if(!l||!v.current)return;const e=(0,p.Z)(v.current),t=t=>{const{current:n}=v;if(null!==n)if(e.hasFocus()&&!r&&s()&&!c.current){if(!n.contains(e.activeElement)){if(t&&h.current!==t.target||e.activeElement!==h.current)h.current=null;else if(null!==h.current)return;if(!g.current)return;let r=[];if(e.activeElement!==u.current&&e.activeElement!==f.current||(r=a(v.current)),r.length>0){var o,i;const e=Boolean((null==(o=y.current)?void 0:o.shiftKey)&&"Tab"===(null==(i=y.current)?void 0:i.key)),t=r[0],n=r[r.length-1];e?n.focus():t.focus()}else n.focus()}}else c.current=!1},n=t=>{y.current=t,!r&&s()&&"Tab"===t.key&&e.activeElement===v.current&&t.shiftKey&&(c.current=!0,f.current.focus())};e.addEventListener("focusin",t),e.addEventListener("keydown",n,!0);const o=setInterval((()=>{"BODY"===e.activeElement.tagName&&t()}),50);return()=>{clearInterval(o),e.removeEventListener("focusin",t),e.removeEventListener("keydown",n,!0)}}),[n,r,o,s,l,a]);const Z=e=>{null===m.current&&(m.current=e.relatedTarget),g.current=!0};return(0,k.jsxs)(i.Fragment,{children:[(0,k.jsx)("div",{tabIndex:0,onFocus:Z,ref:u,"data-test":"sentinelStart"}),i.cloneElement(t,{ref:b,onFocus:e=>{null===m.current&&(m.current=e.relatedTarget),g.current=!0,h.current=e.target;const n=t.props.onFocus;n&&n(e)}}),(0,k.jsx)("div",{tabIndex:0,onFocus:Z,ref:f,"data-test":"sentinelEnd"})]})};var M=n(6087),T=n(8979);function A(e){return(0,T.Z)("MuiModal",e)}(0,M.Z)("MuiModal",["root","hidden"]);const $=["BackdropComponent","BackdropProps","children","classes","className","closeAfterTransition","component","components","componentsProps","container","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","manager","onBackdropClick","onClose","onKeyDown","open","theme","onTransitionEnter","onTransitionExited"],O=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(-1!==n)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&Z(e.modalRef,!1);const r=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);w(t,e.mount,e.modalRef,r,!0);const o=S(this.containers,(e=>e.container===t));return-1!==o?(this.containers[o].modals.push(e),n):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n)}mount(e,t){const n=S(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];r.restore||(r.restore=function(e,t){const n=[],r=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,p.Z)(e);return t.body===e?(0,y.Z)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(r)){const e=function(e){const t=e.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}((0,p.Z)(r));n.push({value:r.style.paddingRight,property:"padding-right",el:r}),r.style.paddingRight=`${x(r)+e}px`;const t=(0,p.Z)(r).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{n.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${x(t)+e}px`}))}const e=r.parentElement,t=(0,y.Z)(r),o="HTML"===(null==e?void 0:e.nodeName)&&"scroll"===t.getComputedStyle(e).overflowY?e:r;n.push({value:o.style.overflow,property:"overflow",el:o},{value:o.style.overflowX,property:"overflow-x",el:o},{value:o.style.overflowY,property:"overflow-y",el:o}),o.style.overflow="hidden"}return()=>{n.forEach((({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)}))}}(r,t))}remove(e){const t=this.modals.indexOf(e);if(-1===t)return t;const n=S(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];if(r.modals.splice(r.modals.indexOf(e),1),this.modals.splice(t,1),0===r.modals.length)r.restore&&r.restore(),e.modalRef&&Z(e.modalRef,!0),w(r.container,e.mount,e.modalRef,r.hiddenSiblings,!1),this.containers.splice(n,1);else{const e=r.modals[r.modals.length-1];e.modalRef&&Z(e.modalRef,!1)}return t}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}},j=i.forwardRef((function(e,t){const{BackdropComponent:n,BackdropProps:l,children:c,classes:h,className:g,closeAfterTransition:v=!1,component:y="div",components:x={},componentsProps:w={},container:S,disableAutoFocus:E=!1,disableEnforceFocus:R=!1,disableEscapeKeyDown:C=!1,disablePortal:M=!1,disableRestoreFocus:T=!1,disableScrollLock:j=!1,hideBackdrop:I=!1,keepMounted:N=!1,manager:z=O,onBackdropClick:L,onClose:F,onKeyDown:B,open:_,theme:D,onTransitionEnter:W,onTransitionExited:V}=e,H=(0,r.Z)(e,$),[G,K]=i.useState(!0),q=i.useRef({}),U=i.useRef(null),X=i.useRef(null),Y=(0,d.Z)(X,t),J=function(e){return!!e.children&&e.children.props.hasOwnProperty("in")}(e),Q=()=>(q.current.modalRef=X.current,q.current.mountNode=U.current,q.current),ee=()=>{z.mount(Q(),{disableScrollLock:j}),X.current.scrollTop=0},te=(0,f.Z)((()=>{const e=function(e){return"function"==typeof e?e():e}(S)||(0,p.Z)(U.current).body;z.add(Q(),e),X.current&&ee()})),ne=i.useCallback((()=>z.isTopModal(Q())),[z]),re=(0,f.Z)((e=>{U.current=e,e&&(_&&ne()?ee():Z(X.current,!0))})),oe=i.useCallback((()=>{z.remove(Q())}),[z]);i.useEffect((()=>()=>{oe()}),[oe]),i.useEffect((()=>{_?te():J&&v||oe()}),[_,oe,J,v,te]);const ie=(0,o.Z)({},e,{classes:h,closeAfterTransition:v,disableAutoFocus:E,disableEnforceFocus:R,disableEscapeKeyDown:C,disablePortal:M,disableRestoreFocus:T,disableScrollLock:j,exited:G,hideBackdrop:I,keepMounted:N}),ae=(e=>{const{open:t,exited:n,classes:r}=e,o={root:["root",!t&&n&&"hidden"]};return(0,s.Z)(o,A,r)})(ie);if(!N&&!_&&(!J||G))return null;const se={};void 0===c.props.tabIndex&&(se.tabIndex="-1"),J&&(se.onEnter=(0,m.Z)((()=>{K(!1),W&&W()}),c.props.onEnter),se.onExited=(0,m.Z)((()=>{K(!0),V&&V(),v&&oe()}),c.props.onExited));const le=x.Root||y,ce=w.root||{};return(0,k.jsx)(b,{ref:re,container:S,disablePortal:M,children:(0,k.jsxs)(le,(0,o.Z)({role:"presentation"},ce,!(0,u.Z)(le)&&{as:y,ownerState:(0,o.Z)({},ie,ce.ownerState),theme:D},H,{ref:Y,onKeyDown:e=>{B&&B(e),"Escape"===e.key&&ne()&&(C||(e.stopPropagation(),F&&F(e,"escapeKeyDown")))},className:(0,a.Z)(ae.root,ce.className,g),children:[!I&&n?(0,k.jsx)(n,(0,o.Z)({open:_,onClick:e=>{e.target===e.currentTarget&&(L&&L(e),F&&F(e,"backdropClick"))}},l)):null,(0,k.jsx)(P,{disableEnforceFocus:R,disableAutoFocus:E,disableRestoreFocus:T,isEnabled:ne,open:_,children:i.cloneElement(c,se)})]}))})}));var I=n(7709),N=n(4368);function z(e){return(0,T.Z)("MuiBackdrop",e)}(0,M.Z)("MuiBackdrop",["root","invisible"]);const L=["classes","className","invisible","component","components","componentsProps","theme"],F=i.forwardRef((function(e,t){const{classes:n,className:i,invisible:l=!1,component:c="div",components:d={},componentsProps:p={},theme:f}=e,m=(0,r.Z)(e,L),h=(0,o.Z)({},e,{classes:n,invisible:l}),g=(e=>{const{classes:t,invisible:n}=e,r={root:["root",n&&"invisible"]};return(0,s.Z)(r,z,t)})(h),v=d.Root||c,b=p.root||{};return(0,k.jsx)(v,(0,o.Z)({"aria-hidden":!0},b,!(0,u.Z)(v)&&{as:c,ownerState:(0,o.Z)({},h,b.ownerState),theme:f},{ref:t},m,{className:(0,a.Z)(g.root,b.className,i)}))}));var B=n(8052),_=n(6067),D=n(2734),W=n(577),V=n(1705);const H=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],G={entering:{opacity:1},entered:{opacity:1}},K={enter:_.x9.enteringScreen,exit:_.x9.leavingScreen},q=i.forwardRef((function(e,t){const{addEndListener:n,appear:a=!0,children:s,easing:l,in:c,onEnter:u,onEntered:d,onEntering:p,onExit:f,onExited:m,onExiting:h,style:g,timeout:v=K,TransitionComponent:b=B.ZP}=e,y=(0,r.Z)(e,H),Z=(0,D.Z)(),x=i.useRef(null),w=(0,V.Z)(s.ref,t),S=(0,V.Z)(x,w),E=e=>t=>{if(e){const n=x.current;void 0===t?e(n):e(n,t)}},R=E(p),C=E(((e,t)=>{(0,W.n)(e);const n=(0,W.C)({style:g,timeout:v,easing:l},{mode:"enter"});e.style.webkitTransition=Z.transitions.create("opacity",n),e.style.transition=Z.transitions.create("opacity",n),u&&u(e,t)})),P=E(d),M=E(h),T=E((e=>{const t=(0,W.C)({style:g,timeout:v,easing:l},{mode:"exit"});e.style.webkitTransition=Z.transitions.create("opacity",t),e.style.transition=Z.transitions.create("opacity",t),f&&f(e)})),A=E(m);return(0,k.jsx)(b,(0,o.Z)({appear:a,in:c,nodeRef:x,onEnter:C,onEntered:P,onEntering:R,onExit:T,onExited:A,onExiting:M,addEndListener:e=>{n&&n(x.current,e)},timeout:v},y,{children:(e,t)=>i.cloneElement(s,(0,o.Z)({style:(0,o.Z)({opacity:0,visibility:"exited"!==e||c?void 0:"hidden"},G[e],g,s.props.style),ref:S},t))}))})),U=["children","components","componentsProps","className","invisible","open","transitionDuration","TransitionComponent"],X=(0,I.ZP)("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.invisible&&t.invisible]}})((({ownerState:e})=>(0,o.Z)({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent"},e.invisible&&{backgroundColor:"transparent"}))),Y=i.forwardRef((function(e,t){var n;const i=(0,N.Z)({props:e,name:"MuiBackdrop"}),{children:a,components:s={},componentsProps:l={},className:c,invisible:d=!1,open:p,transitionDuration:f,TransitionComponent:m=q}=i,h=(0,r.Z)(i,U),g=(e=>{const{classes:t}=e;return t})((0,o.Z)({},i,{invisible:d}));return(0,k.jsx)(m,(0,o.Z)({in:p,timeout:f},h,{children:(0,k.jsx)(F,{className:c,invisible:d,components:(0,o.Z)({Root:X},s),componentsProps:{root:(0,o.Z)({},l.root,(!s.Root||!(0,u.Z)(s.Root))&&{ownerState:(0,o.Z)({},null==(n=l.root)?void 0:n.ownerState)})},classes:g,ref:t,children:a})}))})),J=["BackdropComponent","closeAfterTransition","children","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted"],Q=(0,I.ZP)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,o.Z)({position:"fixed",zIndex:e.zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),ee=(0,I.ZP)(Y,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),te=i.forwardRef((function(e,t){var n;const a=(0,N.Z)({name:"MuiModal",props:e}),{BackdropComponent:s=ee,closeAfterTransition:l=!1,children:c,components:d={},componentsProps:p={},disableAutoFocus:f=!1,disableEnforceFocus:m=!1,disableEscapeKeyDown:h=!1,disablePortal:g=!1,disableRestoreFocus:v=!1,disableScrollLock:b=!1,hideBackdrop:y=!1,keepMounted:Z=!1}=a,x=(0,r.Z)(a,J),[w,S]=i.useState(!0),E={closeAfterTransition:l,disableAutoFocus:f,disableEnforceFocus:m,disableEscapeKeyDown:h,disablePortal:g,disableRestoreFocus:v,disableScrollLock:b,hideBackdrop:y,keepMounted:Z},R=(0,o.Z)({},a,E,{exited:w}).classes;return(0,k.jsx)(j,(0,o.Z)({components:(0,o.Z)({Root:Q},d),componentsProps:{root:(0,o.Z)({},p.root,(!d.Root||!(0,u.Z)(d.Root))&&{ownerState:(0,o.Z)({},null==(n=p.root)?void 0:n.ownerState)})},BackdropComponent:s,onTransitionEnter:()=>S(!1),onTransitionExited:()=>S(!0),ref:t},x,{classes:R},E,{children:c}))}));var ne=n(6501);function re(e){return(0,T.Z)("MuiDialog",e)}const oe=(0,M.Z)("MuiDialog",["root","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]);var ie=n(4182);const ae=["aria-describedby","aria-labelledby","BackdropComponent","BackdropProps","children","className","disableEscapeKeyDown","fullScreen","fullWidth","maxWidth","onBackdropClick","onClose","open","PaperComponent","PaperProps","scroll","TransitionComponent","transitionDuration","TransitionProps"],se=(0,I.ZP)(Y,{name:"MuiDialog",slot:"Backdrop",overrides:(e,t)=>t.backdrop})({zIndex:-1}),le=(0,I.ZP)(te,{name:"MuiDialog",slot:"Root",overridesResolver:(e,t)=>t.root})({"@media print":{position:"absolute !important"}}),ce=(0,I.ZP)("div",{name:"MuiDialog",slot:"Container",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.container,t[`scroll${(0,c.Z)(n.scroll)}`]]}})((({ownerState:e})=>(0,o.Z)({height:"100%","@media print":{height:"auto"},outline:0},"paper"===e.scroll&&{display:"flex",justifyContent:"center",alignItems:"center"},"body"===e.scroll&&{overflowY:"auto",overflowX:"hidden",textAlign:"center","&:after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}))),ue=(0,I.ZP)(ne.Z,{name:"MuiDialog",slot:"Paper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.paper,t[`scrollPaper${(0,c.Z)(n.scroll)}`],t[`paperWidth${(0,c.Z)(String(n.maxWidth))}`],n.fullWidth&&t.paperFullWidth,n.fullScreen&&t.paperFullScreen]}})((({theme:e,ownerState:t})=>(0,o.Z)({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"}},"paper"===t.scroll&&{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"},"body"===t.scroll&&{display:"inline-block",verticalAlign:"middle",textAlign:"left"},!t.maxWidth&&{maxWidth:"calc(100% - 64px)"},"xs"===t.maxWidth&&{maxWidth:"px"===e.breakpoints.unit?Math.max(e.breakpoints.values.xs,444):`${e.breakpoints.values.xs}${e.breakpoints.unit}`,[`&.${oe.paperScrollBody}`]:{[e.breakpoints.down(Math.max(e.breakpoints.values.xs,444)+64)]:{maxWidth:"calc(100% - 64px)"}}},"xs"!==t.maxWidth&&{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`,[`&.${oe.paperScrollBody}`]:{[e.breakpoints.down(e.breakpoints.values[t.maxWidth]+64)]:{maxWidth:"calc(100% - 64px)"}}},t.fullWidth&&{width:"calc(100% - 64px)"},t.fullScreen&&{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${oe.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}))),de={enter:_.x9.enteringScreen,exit:_.x9.leavingScreen},pe=i.forwardRef((function(e,t){const n=(0,N.Z)({props:e,name:"MuiDialog"}),{"aria-describedby":u,"aria-labelledby":d,BackdropComponent:p,BackdropProps:f,children:m,className:h,disableEscapeKeyDown:g=!1,fullScreen:v=!1,fullWidth:b=!1,maxWidth:y="sm",onBackdropClick:Z,onClose:x,open:w,PaperComponent:S=ne.Z,PaperProps:E={},scroll:R="paper",TransitionComponent:C=q,transitionDuration:P=de,TransitionProps:M}=n,T=(0,r.Z)(n,ae),A=(0,o.Z)({},n,{disableEscapeKeyDown:g,fullScreen:v,fullWidth:b,maxWidth:y,scroll:R}),$=(e=>{const{classes:t,scroll:n,maxWidth:r,fullWidth:o,fullScreen:i}=e,a={root:["root"],container:["container",`scroll${(0,c.Z)(n)}`],paper:["paper",`paperScroll${(0,c.Z)(n)}`,`paperWidth${(0,c.Z)(String(r))}`,o&&"paperFullWidth",i&&"paperFullScreen"]};return(0,s.Z)(a,re,t)})(A),O=i.useRef(),j=(0,l.Z)(d),I=i.useMemo((()=>({titleId:j})),[j]);return(0,k.jsx)(le,(0,o.Z)({className:(0,a.Z)($.root,h),BackdropProps:(0,o.Z)({transitionDuration:P,as:p},f),closeAfterTransition:!0,BackdropComponent:se,disableEscapeKeyDown:g,onClose:x,open:w,ref:t,onClick:e=>{O.current&&(O.current=null,Z&&Z(e),x&&x(e,"backdropClick"))},ownerState:A},T,{children:(0,k.jsx)(C,(0,o.Z)({appear:!0,in:w,timeout:P,role:"presentation"},M,{children:(0,k.jsx)(ce,{className:(0,a.Z)($.container),onMouseDown:e=>{O.current=e.target===e.currentTarget},ownerState:A,children:(0,k.jsx)(ue,(0,o.Z)({as:S,elevation:24,role:"dialog","aria-describedby":u,"aria-labelledby":j},E,{className:(0,a.Z)($.paper,E.className),ownerState:A,children:(0,k.jsx)(ie.Z.Provider,{value:I,children:m})}))})}))}))}))},4182:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=(0,n(2950).createContext)({})},3447:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(8979);function d(e){return(0,u.Z)("MuiDialogActions",e)}(0,n(6087).Z)("MuiDialogActions",["root","spacing"]);var p=n(5893);const f=["className","disableSpacing"],m=(0,l.ZP)("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableSpacing&&t.spacing]}})((({ownerState:e})=>(0,o.Z)({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto"},!e.disableSpacing&&{"& > :not(:first-of-type)":{marginLeft:8}}))),h=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiDialogActions"}),{className:i,disableSpacing:l=!1}=n,u=(0,r.Z)(n,f),h=(0,o.Z)({},n,{disableSpacing:l}),g=(e=>{const{classes:t,disableSpacing:n}=e,r={root:["root",!n&&"spacing"]};return(0,s.Z)(r,d,t)})(h);return(0,p.jsx)(m,(0,o.Z)({className:(0,a.Z)(g.root,i),ownerState:h,ref:t},u))}))},7750:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(8979);function d(e){return(0,u.Z)("MuiDialogContent",e)}(0,n(6087).Z)("MuiDialogContent",["root","dividers"]);var p=n(4472),f=n(5893);const m=["className","dividers"],h=(0,l.ZP)("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.dividers&&t.dividers]}})((({theme:e,ownerState:t})=>(0,o.Z)({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px"},t.dividers?{padding:"16px 24px",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`}:{[`.${p.Z.root} + &`]:{paddingTop:0}}))),g=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiDialogContent"}),{className:i,dividers:l=!1}=n,u=(0,r.Z)(n,m),p=(0,o.Z)({},n,{dividers:l}),g=(e=>{const{classes:t,dividers:n}=e,r={root:["root",n&&"dividers"]};return(0,s.Z)(r,d,t)})(p);return(0,f.jsx)(h,(0,o.Z)({className:(0,a.Z)(g.root,i),ownerState:p,ref:t},u))}))},7645:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(7462),o=n(3366),i=n(2950),a=n(6010),s=n(7192),l=n(245),c=n(7709),u=n(4368),d=n(4472),p=n(4182),f=n(5893);const m=["className","id"],h=(0,c.ZP)(l.Z,{name:"MuiDialogTitle",slot:"Root",overridesResolver:(e,t)=>t.root})({padding:"16px 24px",flex:"0 0 auto"}),g=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiDialogTitle"}),{className:l,id:c}=n,g=(0,o.Z)(n,m),v=n,b=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"]},d.a,t)})(v),{titleId:y=c}=i.useContext(p.Z);return(0,f.jsx)(h,(0,r.Z)({component:"h2",className:(0,a.Z)(b.root,l),ownerState:v,ref:t,variant:"h6",id:y},g))}))},4472:(e,t,n)=>{"use strict";n.d(t,{a:()=>o,Z:()=>i});var r=n(8979);function o(e){return(0,r.Z)("MuiDialogTitle",e)}const i=(0,n(6087).Z)("MuiDialogTitle",["root"])},2116:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(1796),c=n(7709),u=n(4368),d=n(8979);function p(e){return(0,d.Z)("MuiDivider",e)}(0,n(6087).Z)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"]);var f=n(5893);const m=["absolute","children","className","component","flexItem","light","orientation","role","textAlign","variant"],h=(0,c.ZP)("div",{name:"MuiDivider",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.absolute&&t.absolute,t[n.variant],n.light&&t.light,"vertical"===n.orientation&&t.vertical,n.flexItem&&t.flexItem,n.children&&t.withChildren,n.children&&"vertical"===n.orientation&&t.withChildrenVertical,"right"===n.textAlign&&"vertical"!==n.orientation&&t.textAlignRight,"left"===n.textAlign&&"vertical"!==n.orientation&&t.textAlignLeft]}})((({theme:e,ownerState:t})=>(0,o.Z)({margin:0,flexShrink:0,borderWidth:0,borderStyle:"solid",borderColor:e.palette.divider,borderBottomWidth:"thin"},t.absolute&&{position:"absolute",bottom:0,left:0,width:"100%"},t.light&&{borderColor:(0,l.Fq)(e.palette.divider,.08)},"inset"===t.variant&&{marginLeft:72},"middle"===t.variant&&"horizontal"===t.orientation&&{marginLeft:e.spacing(2),marginRight:e.spacing(2)},"middle"===t.variant&&"vertical"===t.orientation&&{marginTop:e.spacing(1),marginBottom:e.spacing(1)},"vertical"===t.orientation&&{height:"100%",borderBottomWidth:0,borderRightWidth:"thin"},t.flexItem&&{alignSelf:"stretch",height:"auto"})),(({theme:e,ownerState:t})=>(0,o.Z)({},t.children&&{display:"flex",whiteSpace:"nowrap",textAlign:"center",border:0,"&::before, &::after":{position:"relative",width:"100%",borderTop:`thin solid ${e.palette.divider}`,top:"50%",content:'""',transform:"translateY(50%)"}})),(({theme:e,ownerState:t})=>(0,o.Z)({},t.children&&"vertical"===t.orientation&&{flexDirection:"column","&::before, &::after":{height:"100%",top:"0%",left:"50%",borderTop:0,borderLeft:`thin solid ${e.palette.divider}`,transform:"translateX(0%)"}})),(({ownerState:e})=>(0,o.Z)({},"right"===e.textAlign&&"vertical"!==e.orientation&&{"&::before":{width:"90%"},"&::after":{width:"10%"}},"left"===e.textAlign&&"vertical"!==e.orientation&&{"&::before":{width:"10%"},"&::after":{width:"90%"}}))),g=(0,c.ZP)("span",{name:"MuiDivider",slot:"Wrapper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.wrapper,"vertical"===n.orientation&&t.wrapperVertical]}})((({theme:e,ownerState:t})=>(0,o.Z)({display:"inline-block",paddingLeft:`calc(${e.spacing(1)} * 1.2)`,paddingRight:`calc(${e.spacing(1)} * 1.2)`},"vertical"===t.orientation&&{paddingTop:`calc(${e.spacing(1)} * 1.2)`,paddingBottom:`calc(${e.spacing(1)} * 1.2)`}))),v=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiDivider"}),{absolute:i=!1,children:l,className:c,component:d=(l?"div":"hr"),flexItem:v=!1,light:b=!1,orientation:y="horizontal",role:Z=("hr"!==d?"separator":void 0),textAlign:x="center",variant:w="fullWidth"}=n,S=(0,r.Z)(n,m),k=(0,o.Z)({},n,{absolute:i,component:d,flexItem:v,light:b,orientation:y,role:Z,textAlign:x,variant:w}),E=(e=>{const{absolute:t,children:n,classes:r,flexItem:o,light:i,orientation:a,textAlign:l,variant:c}=e,u={root:["root",t&&"absolute",c,i&&"light","vertical"===a&&"vertical",o&&"flexItem",n&&"withChildren",n&&"vertical"===a&&"withChildrenVertical","right"===l&&"vertical"!==a&&"textAlignRight","left"===l&&"vertical"!==a&&"textAlignLeft"],wrapper:["wrapper","vertical"===a&&"wrapperVertical"]};return(0,s.Z)(u,p,r)})(k);return(0,f.jsx)(h,(0,o.Z)({as:d,className:(0,a.Z)(E.root,c),role:Z,ref:t,ownerState:k},S,{children:l?(0,f.jsx)(g,{className:E.wrapper,ownerState:k,children:l}):null}))}))},3709:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(8979);function d(e){return(0,u.Z)("MuiFormGroup",e)}(0,n(6087).Z)("MuiFormGroup",["root","row"]);var p=n(5893);const f=["className","row"],m=(0,l.ZP)("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.row&&t.row]}})((({ownerState:e})=>(0,o.Z)({display:"flex",flexDirection:"column",flexWrap:"wrap"},e.row&&{flexDirection:"row"}))),h=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiFormGroup"}),{className:i,row:l=!1}=n,u=(0,r.Z)(n,f),h=(0,o.Z)({},n,{row:l}),g=(e=>{const{classes:t,row:n}=e,r={root:["root",n&&"row"]};return(0,s.Z)(r,d,t)})(h);return(0,p.jsx)(m,(0,o.Z)({className:(0,a.Z)(g.root,i),ownerState:h,ref:t},u))}))},573:(e,t,n)=>{"use strict";n.d(t,{Z:()=>y});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(8216),c=n(245);const u=i.createContext();var d=n(7709),p=n(8979);function f(e){return(0,p.Z)("MuiInputAdornment",e)}const m=(0,n(6087).Z)("MuiInputAdornment",["root","filled","standard","outlined","positionStart","positionEnd","disablePointerEvents","hiddenLabel","sizeSmall"]);var h=n(4368),g=n(5893);const v=["children","className","component","disablePointerEvents","disableTypography","position","variant"],b=(0,d.ZP)("div",{name:"MuiInputAdornment",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`position${(0,l.Z)(n.position)}`],!0===n.disablePointerEvents&&t.disablePointerEvents,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,o.Z)({display:"flex",height:"0.01em",maxHeight:"2em",alignItems:"center",whiteSpace:"nowrap",color:e.palette.action.active},"filled"===t.variant&&{[`&.${m.positionStart}&:not(.${m.hiddenLabel})`]:{marginTop:16}},"start"===t.position&&{marginRight:8},"end"===t.position&&{marginLeft:8},!0===t.disablePointerEvents&&{pointerEvents:"none"}))),y=i.forwardRef((function(e,t){const n=(0,h.Z)({props:e,name:"MuiInputAdornment"}),{children:d,className:p,component:m="div",disablePointerEvents:y=!1,disableTypography:Z=!1,position:x,variant:w}=n,S=(0,r.Z)(n,v),k=i.useContext(u)||{};let E=w;w&&k.variant,k&&!E&&(E=k.variant);const R=(0,o.Z)({},n,{hiddenLabel:k.hiddenLabel,size:k.size,disablePointerEvents:y,position:x,variant:E}),C=(e=>{const{classes:t,disablePointerEvents:n,hiddenLabel:r,position:o,size:i,variant:a}=e,c={root:["root",n&&"disablePointerEvents",o&&`position${(0,l.Z)(o)}`,a,r&&"hiddenLabel",i&&`size${(0,l.Z)(i)}`]};return(0,s.Z)(c,f,t)})(R);return(0,g.jsx)(u.Provider,{value:null,children:(0,g.jsx)(b,(0,o.Z)({as:m,ownerState:R,className:(0,a.Z)(C.root,p),ref:t},S,{children:"string"!=typeof d||Z?(0,g.jsxs)(i.Fragment,{children:["start"===x?(0,g.jsx)("span",{className:"notranslate",dangerouslySetInnerHTML:{__html:"​"}}):null,d]}):(0,g.jsx)(c.Z,{color:"text.secondary",children:d})}))})}))},2440:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(7709),c=n(4368),u=n(9773),d=n(8979);function p(e){return(0,d.Z)("MuiList",e)}(0,n(6087).Z)("MuiList",["root","padding","dense","subheader"]);var f=n(5893);const m=["children","className","component","dense","disablePadding","subheader"],h=(0,l.ZP)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})((({ownerState:e})=>(0,o.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),g=i.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiList"}),{children:l,className:d,component:g="ul",dense:v=!1,disablePadding:b=!1,subheader:y}=n,Z=(0,r.Z)(n,m),x=i.useMemo((()=>({dense:v})),[v]),w=(0,o.Z)({},n,{component:g,dense:v,disablePadding:b}),S=(e=>{const{classes:t,disablePadding:n,dense:r,subheader:o}=e,i={root:["root",!n&&"padding",r&&"dense",o&&"subheader"]};return(0,s.Z)(i,p,t)})(w);return(0,f.jsx)(u.Z.Provider,{value:x,children:(0,f.jsxs)(h,(0,o.Z)({as:g,className:(0,a.Z)(S.root,d),ref:t,ownerState:w},Z,{children:[y,l]}))})}))},9773:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(2950).createContext({})},799:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>$});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(8442),c=n(1796),u=n(7709),d=n(4368),p=n(6529),f=n(8502),m=n(8974),h=n(1705),g=n(9773),v=n(8979),b=n(6087);function y(e){return(0,v.Z)("MuiListItem",e)}const Z=(0,b.Z)("MuiListItem",["root","container","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","padding","button","secondaryAction","selected"]),x=(0,b.Z)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"]);function w(e){return(0,v.Z)("MuiListItemSecondaryAction",e)}(0,b.Z)("MuiListItemSecondaryAction",["root","disableGutters"]);var S=n(5893);const k=["className"],E=(0,u.ZP)("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.disableGutters&&t.disableGutters]}})((({ownerState:e})=>(0,o.Z)({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)"},e.disableGutters&&{right:0}))),R=i.forwardRef((function(e,t){const n=(0,d.Z)({props:e,name:"MuiListItemSecondaryAction"}),{className:l}=n,c=(0,r.Z)(n,k),u=i.useContext(g.Z),p=(0,o.Z)({},n,{disableGutters:u.disableGutters}),f=(e=>{const{disableGutters:t,classes:n}=e,r={root:["root",t&&"disableGutters"]};return(0,s.Z)(r,w,n)})(p);return(0,S.jsx)(E,(0,o.Z)({className:(0,a.Z)(f.root,l),ownerState:p,ref:t},c))}));R.muiName="ListItemSecondaryAction";const C=R,P=["className"],M=["alignItems","autoFocus","button","children","className","component","components","componentsProps","ContainerComponent","ContainerProps","dense","disabled","disableGutters","disablePadding","divider","focusVisibleClassName","secondaryAction","selected"],T=(0,u.ZP)("div",{name:"MuiListItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.dense&&t.dense,"flex-start"===n.alignItems&&t.alignItemsFlexStart,n.divider&&t.divider,!n.disableGutters&&t.gutters,!n.disablePadding&&t.padding,n.button&&t.button,n.hasSecondaryAction&&t.secondaryAction]}})((({theme:e,ownerState:t})=>(0,o.Z)({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left"},!t.disablePadding&&(0,o.Z)({paddingTop:8,paddingBottom:8},t.dense&&{paddingTop:4,paddingBottom:4},!t.disableGutters&&{paddingLeft:16,paddingRight:16},!!t.secondaryAction&&{paddingRight:48}),!!t.secondaryAction&&{[`& > .${x.root}`]:{paddingRight:48}},{[`&.${Z.focusVisible}`]:{backgroundColor:e.palette.action.focus},[`&.${Z.selected}`]:{backgroundColor:(0,c.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${Z.focusVisible}`]:{backgroundColor:(0,c.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${Z.disabled}`]:{opacity:e.palette.action.disabledOpacity}},"flex-start"===t.alignItems&&{alignItems:"flex-start"},t.divider&&{borderBottom:`1px solid ${e.palette.divider}`,backgroundClip:"padding-box"},t.button&&{transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:e.palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${Z.selected}:hover`]:{backgroundColor:(0,c.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:(0,c.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}}},t.hasSecondaryAction&&{paddingRight:48}))),A=(0,u.ZP)("li",{name:"MuiListItem",slot:"Container",overridesResolver:(e,t)=>t.container})({position:"relative"}),$=i.forwardRef((function(e,t){const n=(0,d.Z)({props:e,name:"MuiListItem"}),{alignItems:c="center",autoFocus:u=!1,button:v=!1,children:b,className:x,component:w,components:k={},componentsProps:E={},ContainerComponent:R="li",ContainerProps:{className:$}={},dense:O=!1,disabled:j=!1,disableGutters:I=!1,disablePadding:N=!1,divider:z=!1,focusVisibleClassName:L,secondaryAction:F,selected:B=!1}=n,_=(0,r.Z)(n.ContainerProps,P),D=(0,r.Z)(n,M),W=i.useContext(g.Z),V={dense:O||W.dense||!1,alignItems:c,disableGutters:I},H=i.useRef(null);(0,m.Z)((()=>{u&&H.current&&H.current.focus()}),[u]);const G=i.Children.toArray(b),K=G.length&&(0,f.Z)(G[G.length-1],["ListItemSecondaryAction"]),q=(0,o.Z)({},n,{alignItems:c,autoFocus:u,button:v,dense:V.dense,disabled:j,disableGutters:I,disablePadding:N,divider:z,hasSecondaryAction:K,selected:B}),U=(e=>{const{alignItems:t,button:n,classes:r,dense:o,disabled:i,disableGutters:a,disablePadding:l,divider:c,hasSecondaryAction:u,selected:d}=e,p={root:["root",o&&"dense",!a&&"gutters",!l&&"padding",c&&"divider",i&&"disabled",n&&"button","flex-start"===t&&"alignItemsFlexStart",u&&"secondaryAction",d&&"selected"],container:["container"]};return(0,s.Z)(p,y,r)})(q),X=(0,h.Z)(H,t),Y=k.Root||T,J=E.root||{},Q=(0,o.Z)({className:(0,a.Z)(U.root,J.className,x),disabled:j},D);let ee=w||"li";return v&&(Q.component=w||"div",Q.focusVisibleClassName=(0,a.Z)(Z.focusVisible,L),ee=p.Z),K?(ee=Q.component||w?ee:"div","li"===R&&("li"===ee?ee="div":"li"===Q.component&&(Q.component="div")),(0,S.jsx)(g.Z.Provider,{value:V,children:(0,S.jsxs)(A,(0,o.Z)({as:R,className:(0,a.Z)(U.container,$),ref:X,ownerState:q},_,{children:[(0,S.jsx)(Y,(0,o.Z)({},J,!(0,l.Z)(Y)&&{as:ee,ownerState:(0,o.Z)({},q,J.ownerState)},Q,{children:G})),G.pop()]}))})):(0,S.jsx)(g.Z.Provider,{value:V,children:(0,S.jsxs)(Y,(0,o.Z)({},J,{as:ee,ref:X,ownerState:q},!(0,l.Z)(Y)&&{ownerState:(0,o.Z)({},q,J.ownerState)},Q,{children:[G,F&&(0,S.jsx)(C,{children:F})]}))})}))},417:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(9773),c=n(7709),u=n(4368),d=n(8979);function p(e){return(0,d.Z)("MuiListItemAvatar",e)}(0,n(6087).Z)("MuiListItemAvatar",["root","alignItemsFlexStart"]);var f=n(5893);const m=["className"],h=(0,c.ZP)("div",{name:"MuiListItemAvatar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"flex-start"===n.alignItems&&t.alignItemsFlexStart]}})((({ownerState:e})=>(0,o.Z)({minWidth:56,flexShrink:0},"flex-start"===e.alignItems&&{marginTop:8}))),g=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiListItemAvatar"}),{className:c}=n,d=(0,r.Z)(n,m),g=i.useContext(l.Z),v=(0,o.Z)({},n,{alignItems:g.alignItems}),b=(e=>{const{alignItems:t,classes:n}=e,r={root:["root","flex-start"===t&&"alignItemsFlexStart"]};return(0,s.Z)(r,p,n)})(v);return(0,f.jsx)(h,(0,o.Z)({className:(0,a.Z)(b.root,c),ownerState:v,ref:t},d))}))},8584:(e,t,n)=>{"use strict";n.d(t,{Z:()=>b});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(245),c=n(9773),u=n(4368),d=n(7709),p=n(8979);function f(e){return(0,p.Z)("MuiListItemText",e)}const m=(0,n(6087).Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);var h=n(5893);const g=["children","className","disableTypography","inset","primary","primaryTypographyProps","secondary","secondaryTypographyProps"],v=(0,d.ZP)("div",{name:"MuiListItemText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`& .${m.primary}`]:t.primary},{[`& .${m.secondary}`]:t.secondary},t.root,n.inset&&t.inset,n.primary&&n.secondary&&t.multiline,n.dense&&t.dense]}})((({ownerState:e})=>(0,o.Z)({flex:"1 1 auto",minWidth:0,marginTop:4,marginBottom:4},e.primary&&e.secondary&&{marginTop:6,marginBottom:6},e.inset&&{paddingLeft:56}))),b=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiListItemText"}),{children:d,className:p,disableTypography:m=!1,inset:b=!1,primary:y,primaryTypographyProps:Z,secondary:x,secondaryTypographyProps:w}=n,S=(0,r.Z)(n,g),{dense:k}=i.useContext(c.Z);let E=null!=y?y:d,R=x;const C=(0,o.Z)({},n,{disableTypography:m,inset:b,primary:!!E,secondary:!!R,dense:k}),P=(e=>{const{classes:t,inset:n,primary:r,secondary:o,dense:i}=e,a={root:["root",n&&"inset",i&&"dense",r&&o&&"multiline"],primary:["primary"],secondary:["secondary"]};return(0,s.Z)(a,f,t)})(C);return null==E||E.type===l.Z||m||(E=(0,h.jsx)(l.Z,(0,o.Z)({variant:k?"body2":"body1",className:P.primary,component:"span",display:"block"},Z,{children:E}))),null==R||R.type===l.Z||m||(R=(0,h.jsx)(l.Z,(0,o.Z)({variant:"body2",className:P.secondary,color:"text.secondary",display:"block"},w,{children:R}))),(0,h.jsxs)(v,(0,o.Z)({className:(0,a.Z)(P.root,p),ownerState:C,ref:t},S,{children:[E,R]}))}))},6501:(e,t,n)=>{"use strict";n.d(t,{Z:()=>v});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(1796),c=n(7709),u=n(4368),d=n(8979);function p(e){return(0,d.Z)("MuiPaper",e)}(0,n(6087).Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var f=n(5893);const m=["className","component","elevation","square","variant"],h=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)},g=(0,c.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>(0,o.Z)({backgroundColor:e.palette.background.paper,color:e.palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${e.palette.divider}`},"elevation"===t.variant&&(0,o.Z)({boxShadow:e.shadows[t.elevation]},"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.Fq)("#fff",h(t.elevation))}, ${(0,l.Fq)("#fff",h(t.elevation))})`})))),v=i.forwardRef((function(e,t){const n=(0,u.Z)({props:e,name:"MuiPaper"}),{className:i,component:l="div",elevation:c=1,square:d=!1,variant:h="elevation"}=n,v=(0,r.Z)(n,m),b=(0,o.Z)({},n,{component:l,elevation:c,square:d,variant:h}),y=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,i={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,s.Z)(i,p,o)})(b);return(0,f.jsx)(g,(0,o.Z)({as:l,ownerState:b,className:(0,a.Z)(y.root,i),ref:t},v))}))},5282:(e,t,n)=>{"use strict";n.d(t,{Z:()=>D});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(7192),l=n(67),c=n(3633),u=n(7094),d=n(5893);function p(e){return e.substring(2).toLowerCase()}const f=function(e){const{children:t,disableReactTree:n=!1,mouseEvent:r="onClick",onClickAway:o,touchEvent:a="onTouchEnd"}=e,s=i.useRef(!1),f=i.useRef(null),m=i.useRef(!1),h=i.useRef(!1);i.useEffect((()=>(setTimeout((()=>{m.current=!0}),0),()=>{m.current=!1})),[]);const g=(0,l.Z)(t.ref,f),v=(0,c.Z)((e=>{const t=h.current;h.current=!1;const r=(0,u.Z)(f.current);if(!m.current||!f.current||"clientX"in e&&function(e,t){return t.documentElement.clientWidth-1:!r.documentElement.contains(e.target)||f.current.contains(e.target),i||!n&&t||o(e)})),b=e=>n=>{h.current=!0;const r=t.props[e];r&&r(n)},y={ref:g};return!1!==a&&(y[a]=b(a)),i.useEffect((()=>{if(!1!==a){const e=p(a),t=(0,u.Z)(f.current),n=()=>{s.current=!0};return t.addEventListener(e,v),t.addEventListener("touchmove",n),()=>{t.removeEventListener(e,v),t.removeEventListener("touchmove",n)}}}),[v,a]),!1!==r&&(y[r]=b(r)),i.useEffect((()=>{if(!1!==r){const e=p(r),t=(0,u.Z)(f.current);return t.addEventListener(e,v),()=>{t.removeEventListener(e,v)}}}),[v,r]),(0,d.jsx)(i.Fragment,{children:i.cloneElement(t,y)})};var m=n(7709),h=n(2734),g=n(4368),v=n(6067),b=n(2068),y=n(8216),Z=n(8052),x=n(577),w=n(1705);const S=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function k(e){return`scale(${e}, ${e**2})`}const E={entering:{opacity:1,transform:k(1)},entered:{opacity:1,transform:"none"}},R=i.forwardRef((function(e,t){const{addEndListener:n,appear:a=!0,children:s,easing:l,in:c,onEnter:u,onEntered:p,onEntering:f,onExit:m,onExited:g,onExiting:v,style:b,timeout:y="auto",TransitionComponent:R=Z.ZP}=e,C=(0,r.Z)(e,S),P=i.useRef(),M=i.useRef(),T=(0,h.Z)(),A=i.useRef(null),$=(0,w.Z)(s.ref,t),O=(0,w.Z)(A,$),j=e=>t=>{if(e){const n=A.current;void 0===t?e(n):e(n,t)}},I=j(f),N=j(((e,t)=>{(0,x.n)(e);const{duration:n,delay:r,easing:o}=(0,x.C)({style:b,timeout:y,easing:l},{mode:"enter"});let i;"auto"===y?(i=T.transitions.getAutoHeightDuration(e.clientHeight),M.current=i):i=n,e.style.transition=[T.transitions.create("opacity",{duration:i,delay:r}),T.transitions.create("transform",{duration:.666*i,delay:r,easing:o})].join(","),u&&u(e,t)})),z=j(p),L=j(v),F=j((e=>{const{duration:t,delay:n,easing:r}=(0,x.C)({style:b,timeout:y,easing:l},{mode:"exit"});let o;"auto"===y?(o=T.transitions.getAutoHeightDuration(e.clientHeight),M.current=o):o=t,e.style.transition=[T.transitions.create("opacity",{duration:o,delay:n}),T.transitions.create("transform",{duration:.666*o,delay:n||.333*o,easing:r})].join(","),e.style.opacity="0",e.style.transform=k(.75),m&&m(e)})),B=j(g);return i.useEffect((()=>()=>{clearTimeout(P.current)}),[]),(0,d.jsx)(R,(0,o.Z)({appear:a,in:c,nodeRef:A,onEnter:N,onEntered:z,onEntering:I,onExit:F,onExited:B,onExiting:L,addEndListener:e=>{"auto"===y&&(P.current=setTimeout(e,M.current||0)),n&&n(A.current,e)},timeout:"auto"===y?null:y},C,{children:(e,t)=>i.cloneElement(s,(0,o.Z)({style:(0,o.Z)({opacity:0,transform:k(.75),visibility:"exited"!==e||c?void 0:"hidden"},E[e],b,s.props.style),ref:O},t))}))}));R.muiSupportAuto=!0;const C=R;var P=n(1796),M=n(6501),T=n(8979),A=n(6087);function $(e){return(0,T.Z)("MuiSnackbarContent",e)}(0,A.Z)("MuiSnackbarContent",["root","message","action"]);const O=["action","className","message","role"],j=(0,m.ZP)(M.Z,{name:"MuiSnackbarContent",slot:"Root",overridesResolver:(e,t)=>t.root})((({theme:e})=>{const t="light"===e.palette.mode?.8:.98,n=(0,P._4)(e.palette.background.default,t);return(0,o.Z)({},e.typography.body2,{color:e.palette.getContrastText(n),backgroundColor:n,display:"flex",alignItems:"center",flexWrap:"wrap",padding:"6px 16px",borderRadius:e.shape.borderRadius,flexGrow:1,[e.breakpoints.up("sm")]:{flexGrow:"initial",minWidth:288}})})),I=(0,m.ZP)("div",{name:"MuiSnackbarContent",slot:"Message",overridesResolver:(e,t)=>t.message})({padding:"8px 0"}),N=(0,m.ZP)("div",{name:"MuiSnackbarContent",slot:"Action",overridesResolver:(e,t)=>t.action})({display:"flex",alignItems:"center",marginLeft:"auto",paddingLeft:16,marginRight:-8}),z=i.forwardRef((function(e,t){const n=(0,g.Z)({props:e,name:"MuiSnackbarContent"}),{action:i,className:l,message:c,role:u="alert"}=n,p=(0,r.Z)(n,O),f=n,m=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],action:["action"],message:["message"]},$,t)})(f);return(0,d.jsxs)(j,(0,o.Z)({role:u,square:!0,elevation:6,className:(0,a.Z)(m.root,l),ownerState:f,ref:t},p,{children:[(0,d.jsx)(I,{className:m.message,ownerState:f,children:c}),i?(0,d.jsx)(N,{className:m.action,ownerState:f,children:i}):null]}))}));function L(e){return(0,T.Z)("MuiSnackbar",e)}(0,A.Z)("MuiSnackbar",["root","anchorOriginTopCenter","anchorOriginBottomCenter","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft"]);const F=["onEnter","onExited"],B=["action","anchorOrigin","autoHideDuration","children","className","ClickAwayListenerProps","ContentProps","disableWindowBlurListener","message","onClose","onMouseEnter","onMouseLeave","open","resumeHideDuration","TransitionComponent","transitionDuration","TransitionProps"],_=(0,m.ZP)("div",{name:"MuiSnackbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`anchorOrigin${(0,y.Z)(n.anchorOrigin.vertical)}${(0,y.Z)(n.anchorOrigin.horizontal)}`]]}})((({theme:e,ownerState:t})=>{const n=(0,o.Z)({},!t.isRtl&&{left:"50%",right:"auto",transform:"translateX(-50%)"},t.isRtl&&{right:"50%",left:"auto",transform:"translateX(50%)"});return(0,o.Z)({zIndex:e.zIndex.snackbar,position:"fixed",display:"flex",left:8,right:8,justifyContent:"center",alignItems:"center"},"top"===t.anchorOrigin.vertical?{top:8}:{bottom:8},"left"===t.anchorOrigin.horizontal&&{justifyContent:"flex-start"},"right"===t.anchorOrigin.horizontal&&{justifyContent:"flex-end"},{[e.breakpoints.up("sm")]:(0,o.Z)({},"top"===t.anchorOrigin.vertical?{top:24}:{bottom:24},"center"===t.anchorOrigin.horizontal&&n,"left"===t.anchorOrigin.horizontal&&(0,o.Z)({},!t.isRtl&&{left:24,right:"auto"},t.isRtl&&{right:24,left:"auto"}),"right"===t.anchorOrigin.horizontal&&(0,o.Z)({},!t.isRtl&&{right:24,left:"auto"},t.isRtl&&{left:24,right:"auto"}))})})),D=i.forwardRef((function(e,t){const n=(0,g.Z)({props:e,name:"MuiSnackbar"}),{action:l,anchorOrigin:{vertical:c,horizontal:u}={vertical:"bottom",horizontal:"left"},autoHideDuration:p=null,children:m,className:Z,ClickAwayListenerProps:x,ContentProps:w,disableWindowBlurListener:S=!1,message:k,onClose:E,onMouseEnter:R,onMouseLeave:P,open:M,resumeHideDuration:T,TransitionComponent:A=C,transitionDuration:$={enter:v.x9.enteringScreen,exit:v.x9.leavingScreen},TransitionProps:{onEnter:O,onExited:j}={}}=n,I=(0,r.Z)(n.TransitionProps,F),N=(0,r.Z)(n,B),D="rtl"===(0,h.Z)().direction,W=(0,o.Z)({},n,{anchorOrigin:{vertical:c,horizontal:u},isRtl:D}),V=(e=>{const{classes:t,anchorOrigin:n}=e,r={root:["root",`anchorOrigin${(0,y.Z)(n.vertical)}${(0,y.Z)(n.horizontal)}`]};return(0,s.Z)(r,L,t)})(W),H=i.useRef(),[G,K]=i.useState(!0),q=(0,b.Z)(((...e)=>{E&&E(...e)})),U=(0,b.Z)((e=>{E&&null!=e&&(clearTimeout(H.current),H.current=setTimeout((()=>{q(null,"timeout")}),e))}));i.useEffect((()=>(M&&U(p),()=>{clearTimeout(H.current)})),[M,p,U]);const X=()=>{clearTimeout(H.current)},Y=i.useCallback((()=>{null!=p&&U(null!=T?T:.5*p)}),[p,T,U]);return i.useEffect((()=>{if(!S&&M)return window.addEventListener("focus",Y),window.addEventListener("blur",X),()=>{window.removeEventListener("focus",Y),window.removeEventListener("blur",X)}}),[S,Y,M]),!M&&G?null:(0,d.jsx)(f,(0,o.Z)({onClickAway:e=>{E&&E(e,"clickaway")}},x,{children:(0,d.jsx)(_,(0,o.Z)({className:(0,a.Z)(V.root,Z),onMouseEnter:e=>{R&&R(e),X()},onMouseLeave:e=>{P&&P(e),Y()},ownerState:W,ref:t},N,{children:(0,d.jsx)(A,(0,o.Z)({appear:!0,in:M,timeout:$,direction:"top"===c?"down":"up",onEnter:(e,t)=>{K(!1),O&&O(e,t)},onExited:e=>{K(!0),j&&j(e)}},I,{children:m||(0,d.jsx)(z,(0,o.Z)({message:k,action:l},w))}))}))}))}))},245:(e,t,n)=>{"use strict";n.d(t,{Z:()=>x});var r=n(3366),o=n(7462),i=n(2950),a=n(6010),s=n(9766),l=n(6977);const c=["sx"];var u=n(7192),d=n(7709),p=n(4368),f=n(8216),m=n(8979);function h(e){return(0,m.Z)("MuiTypography",e)}(0,n(6087).Z)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var g=n(5893);const v=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],b=(0,d.ZP)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,f.Z)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.Z)({margin:0},t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),y={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Z={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},x=i.forwardRef((function(e,t){const n=(0,p.Z)({props:e,name:"MuiTypography"}),i=(e=>Z[e]||e)(n.color),d=function(e){const{sx:t}=e,n=(0,r.Z)(e,c),{systemProps:i,otherProps:a}=(e=>{const t={systemProps:{},otherProps:{}};return Object.keys(e).forEach((n=>{l.Gc[n]?t.systemProps[n]=e[n]:t.otherProps[n]=e[n]})),t})(n);let u;return u=Array.isArray(t)?[i,...t]:"function"==typeof t?(...e)=>{const n=t(...e);return(0,s.P)(n)?(0,o.Z)({},i,n):i}:(0,o.Z)({},i,t),(0,o.Z)({},a,{sx:u})}((0,o.Z)({},n,{color:i})),{align:m="inherit",className:x,component:w,gutterBottom:S=!1,noWrap:k=!1,paragraph:E=!1,variant:R="body1",variantMapping:C=y}=d,P=(0,r.Z)(d,v),M=(0,o.Z)({},d,{align:m,color:i,className:x,component:w,gutterBottom:S,noWrap:k,paragraph:E,variant:R,variantMapping:C}),T=w||(E?"p":C[R]||y[R])||"span",A=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:i,classes:a}=e,s={root:["root",i,"inherit"!==e.align&&`align${(0,f.Z)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,u.Z)(s,h,a)})(M);return(0,g.jsx)(b,(0,o.Z)({as:T,ref:t,ownerState:M,className:(0,a.Z)(A.root,x)},P))}))},6115:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={black:"#000",white:"#fff"}},3486:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"}},5137:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"}},265:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"}},3023:(e,t)=>{"use strict";if("function"==typeof Symbol&&Symbol.for){var n=Symbol.for;n("react.element"),n("react.portal"),n("react.fragment"),n("react.strict_mode"),n("react.profiler"),n("react.provider"),n("react.context"),n("react.forward_ref"),n("react.suspense"),n("react.suspense_list"),n("react.memo"),n("react.lazy"),n("react.block"),n("react.server.block"),n("react.fundamental"),n("react.debug_trace_mode"),n("react.legacy_hidden")}},6607:(e,t,n)=>{"use strict";n(3023)},6038:(e,t,n)=>{"use strict";n.d(t,{Z:()=>W});var r=n(7462),o=n(3366),i=n(9766),a=n(6268),s=n(1387),l=n(1796),c=n(6115);const u={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},d="#f3e5f5",p="#ce93d8",f="#ba68c8",m="#ab47bc",h="#9c27b0",g="#7b1fa2";var v=n(265),b=n(5137);const y="#e3f2fd",Z="#90caf9",x="#42a5f5",w="#1976d2",S="#1565c0",k="#4fc3f7",E="#29b6f6",R="#03a9f4",C="#0288d1",P="#01579b";var M=n(3486);const T=["mode","contrastThreshold","tonalOffset"],A={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:c.Z.white,default:c.Z.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},$={text:{primary:c.Z.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:c.Z.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function O(e,t,n,r){const o=r.light||r,i=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,l.$n)(e.main,o):"dark"===t&&(e.dark=(0,l._j)(e.main,i)))}const j=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],I={textTransform:"uppercase"},N='"Roboto", "Helvetica", "Arial", sans-serif';function z(e,t){const n="function"==typeof t?t(e):t,{fontFamily:a=N,fontSize:s=14,fontWeightLight:l=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=n,h=(0,o.Z)(n,j),g=s/14,v=m||(e=>e/p*g+"rem"),b=(e,t,n,o,i)=>{return(0,r.Z)({fontFamily:a,fontWeight:e,fontSize:v(t),lineHeight:n},a===N?{letterSpacing:(s=o/t,Math.round(1e5*s)/1e5+"em")}:{},i,f);var s},y={h1:b(l,96,1.167,-1.5),h2:b(l,60,1.2,-.5),h3:b(c,48,1.167,0),h4:b(c,34,1.235,.25),h5:b(c,24,1.334,0),h6:b(u,20,1.6,.15),subtitle1:b(c,16,1.75,.15),subtitle2:b(u,14,1.57,.1),body1:b(c,16,1.5,.15),body2:b(c,14,1.43,.15),button:b(u,14,1.75,.4,I),caption:b(c,12,1.66,.4),overline:b(c,12,2.66,1,I)};return(0,i.Z)((0,r.Z)({htmlFontSize:p,pxToRem:v,fontFamily:a,fontSize:s,fontWeightLight:l,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},y),h,{clone:!1})}function L(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const F=["none",L(0,2,1,-1,0,1,1,0,0,1,3,0),L(0,3,1,-2,0,2,2,0,0,1,5,0),L(0,3,3,-2,0,3,4,0,0,1,8,0),L(0,2,4,-1,0,4,5,0,0,1,10,0),L(0,3,5,-1,0,5,8,0,0,1,14,0),L(0,3,5,-1,0,6,10,0,0,1,18,0),L(0,4,5,-2,0,7,10,1,0,2,16,1),L(0,5,5,-3,0,8,10,1,0,3,14,2),L(0,5,6,-3,0,9,12,1,0,3,16,2),L(0,6,6,-3,0,10,14,1,0,4,18,3),L(0,6,7,-4,0,11,15,1,0,4,20,3),L(0,7,8,-4,0,12,17,2,0,5,22,4),L(0,7,8,-4,0,13,19,2,0,5,24,4),L(0,7,9,-4,0,14,21,2,0,5,26,4),L(0,8,9,-5,0,15,22,2,0,6,28,5),L(0,8,10,-5,0,16,24,2,0,6,30,5),L(0,8,11,-5,0,17,26,2,0,6,32,5),L(0,9,11,-5,0,18,28,2,0,7,34,6),L(0,9,12,-6,0,19,29,2,0,7,36,6),L(0,10,13,-6,0,20,31,3,0,8,38,7),L(0,10,13,-6,0,21,33,3,0,8,40,7),L(0,10,14,-6,0,22,35,3,0,8,42,7),L(0,11,14,-7,0,23,36,3,0,9,44,8),L(0,11,15,-7,0,24,38,3,0,9,46,8)];var B=n(6067);const _={mobileStepper:1e3,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},D=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const W=function(e={},...t){const{mixins:n={},palette:j={},transitions:I={},typography:N={}}=e,L=(0,o.Z)(e,D),W=function(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:a=.2}=e,j=(0,o.Z)(e,T),I=e.primary||function(e="light"){return"dark"===e?{main:Z,light:y,dark:x}:{main:w,light:x,dark:S}}(t),N=e.secondary||function(e="light"){return"dark"===e?{main:p,light:d,dark:m}:{main:h,light:f,dark:g}}(t),z=e.error||function(e="light"){return"dark"===e?{main:v.Z[500],light:v.Z[300],dark:v.Z[700]}:{main:v.Z[700],light:v.Z[400],dark:v.Z[800]}}(t),L=e.info||function(e="light"){return"dark"===e?{main:E,light:k,dark:C}:{main:C,light:R,dark:P}}(t),F=e.success||function(e="light"){return"dark"===e?{main:M.Z[400],light:M.Z[300],dark:M.Z[700]}:{main:M.Z[800],light:M.Z[500],dark:M.Z[900]}}(t),B=e.warning||function(e="light"){return"dark"===e?{main:b.Z[400],light:b.Z[300],dark:b.Z[700]}:{main:"#ed6c02",light:b.Z[500],dark:b.Z[900]}}(t);function _(e){return(0,l.mi)(e,$.text.primary)>=n?$.text.primary:A.text.primary}const D=({color:e,name:t,mainShade:n=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,r.Z)({},e)).main&&e[n]&&(e.main=e[n]),!e.hasOwnProperty("main"))throw new Error((0,s.Z)(11,t?` (${t})`:"",n));if("string"!=typeof e.main)throw new Error((0,s.Z)(12,t?` (${t})`:"",JSON.stringify(e.main)));return O(e,"light",o,a),O(e,"dark",i,a),e.contrastText||(e.contrastText=_(e.main)),e},W={dark:$,light:A};return(0,i.Z)((0,r.Z)({common:c.Z,mode:t,primary:D({color:I,name:"primary"}),secondary:D({color:N,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:D({color:z,name:"error"}),warning:D({color:B,name:"warning"}),info:D({color:L,name:"info"}),success:D({color:F,name:"success"}),grey:u,contrastThreshold:n,getContrastText:_,augmentColor:D,tonalOffset:a},W[t]),j)}(j),V=(0,a.Z)(e);let H=(0,i.Z)(V,{mixins:(G=V.breakpoints,V.spacing,K=n,(0,r.Z)({toolbar:{minHeight:56,[`${G.up("xs")} and (orientation: landscape)`]:{minHeight:48},[G.up("sm")]:{minHeight:64}}},K)),palette:W,shadows:F.slice(),typography:z(W,N),transitions:(0,B.ZP)(I),zIndex:(0,r.Z)({},_)});var G,K;return H=(0,i.Z)(H,L),H=t.reduce(((e,t)=>(0,i.Z)(e,t)),H),H}},6067:(e,t,n)=>{"use strict";n.d(t,{x9:()=>s,ZP:()=>u});var r=n(3366),o=n(7462);const i=["duration","easing","delay"],a={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},s={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function l(e){return`${Math.round(e)}ms`}function c(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function u(e){const t=(0,o.Z)({},a,e.easing),n=(0,o.Z)({},s,e.duration);return(0,o.Z)({getAutoHeightDuration:c,create:(e=["all"],o={})=>{const{duration:a=n.standard,easing:s=t.easeInOut,delay:c=0}=o;return(0,r.Z)(o,i),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:l(a)} ${s} ${"string"==typeof c?c:l(c)}`)).join(",")}},e,{easing:t,duration:n})}},247:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=(0,n(6038).Z)()},7709:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>E,FO:()=>S});var r=n(3366),o=n(7462),i=n(6790),a=n(6268),s=n(8320);const l=["variant"];function c(e){return 0===e.length}function u(e){const{variant:t}=e,n=(0,r.Z)(e,l);let o=t||"";return Object.keys(n).sort().forEach((t=>{o+="color"===t?c(o)?e[t]:(0,s.Z)(e[t]):`${c(o)?t:(0,s.Z)(t)}${(0,s.Z)(e[t].toString())}`})),o}var d=n(7730),p=n(6977),f=n(5408);const m=function(e=p.G$){const t=Object.keys(e).reduce(((t,n)=>(e[n].filterProps.forEach((r=>{t[r]=e[n]})),t)),{});function n(e,n,r){const o={[e]:n,theme:r},i=t[e];return i?i(o):{[e]:n}}return function e(r){const{sx:o,theme:i={}}=r||{};if(!o)return null;function a(r){let o=r;if("function"==typeof r)o=r(i);else if("object"!=typeof r)return r;if(!o)return null;const a=(0,f.W8)(i.breakpoints),s=Object.keys(a);let l=a;return Object.keys(o).forEach((r=>{const a="function"==typeof(s=o[r])?s(i):s;var s;if(null!=a)if("object"==typeof a)if(t[r])l=(0,d.Z)(l,n(r,a,i));else{const t=(0,f.k9)({theme:i},a,(e=>({[r]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),n=new Set(t);return e.every((e=>n.size===Object.keys(e).length))}(t,a)?l=(0,d.Z)(l,t):l[r]=e({sx:a,theme:i})}else l=(0,d.Z)(l,n(r,a,i))})),(0,f.L7)(s,l)}return Array.isArray(o)?o.map(a):a(o)}}();m.filterProps=["sx"];const h=m,g=["name","slot","skipVariantsResolver","skipSx","overridesResolver"],v=["theme"],b=["theme"];function y(e){return 0===Object.keys(e).length}function Z(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const x=(0,a.Z)();var w=n(247);const S=e=>Z(e)&&"classes"!==e,k=function(e={}){const{defaultTheme:t=x,rootShouldForwardProp:n=Z,slotShouldForwardProp:a=Z,styleFunctionSx:s=h}=e,l=e=>{const n=y(e.theme)?t:e.theme;return s((0,o.Z)({},e,{theme:n}))};return l.__mui_systemSx=!0,(e,s={})=>{((e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=e.__emotion_styles.filter((e=>!(null!=e&&e.__mui_systemSx))))})(e);const{name:c,slot:d,skipVariantsResolver:p,skipSx:f,overridesResolver:m}=s,h=(0,r.Z)(s,g),x=void 0!==p?p:d&&"Root"!==d||!1,w=f||!1;let S=Z;"Root"===d?S=n:d?S=a:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(S=void 0);const k=function(e,t){return(0,i.Z)(e,t)}(e,(0,o.Z)({shouldForwardProp:S,label:void 0},h)),E=(e,...n)=>{const i=n?n.map((e=>"function"==typeof e&&e.__emotion_real!==e?n=>{let{theme:i}=n,a=(0,r.Z)(n,v);return e((0,o.Z)({theme:y(i)?t:i},a))}:e)):[];let a=e;c&&m&&i.push((e=>{const n=y(e.theme)?t:e.theme,r=((e,t)=>t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null)(c,n);if(r){const t={};return Object.entries(r).forEach((([r,i])=>{t[r]="function"==typeof i?i((0,o.Z)({},e,{theme:n})):i})),m(e,t)}return null})),c&&!x&&i.push((e=>{const n=y(e.theme)?t:e.theme;return((e,t,n,r)=>{var o,i;const{ownerState:a={}}=e,s=[],l=null==n||null==(o=n.components)||null==(i=o[r])?void 0:i.variants;return l&&l.forEach((n=>{let r=!0;Object.keys(n.props).forEach((t=>{a[t]!==n.props[t]&&e[t]!==n.props[t]&&(r=!1)})),r&&s.push(t[u(n.props)])})),s})(e,((e,t)=>{let n=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(n=t.components[e].variants);const r={};return n.forEach((e=>{const t=u(e.props);r[t]=e.style})),r})(c,n),n,c)})),w||i.push(l);const s=i.length-n.length;if(Array.isArray(e)&&s>0){const t=new Array(s).fill("");a=[...e,...t],a.raw=[...e.raw,...t]}else"function"==typeof e&&e.__emotion_real!==e&&(a=n=>{let{theme:i}=n,a=(0,r.Z)(n,b);return e((0,o.Z)({theme:y(i)?t:i},a))});return k(a,...i)};return k.withConfig&&(E.withConfig=k.withConfig),E}}({defaultTheme:w.Z,rootShouldForwardProp:S}),E=k},2734:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i}),n(2950);var r=n(6631),o=n(247);function i(){return(0,r.Z)(o.Z)}},4368:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7462);var o=n(6631),i=n(247);function a({props:e,name:t}){return function({props:e,name:t,defaultTheme:n}){return function(e){const{theme:t,name:n,props:o}=e;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?function(e,t){const n=(0,r.Z)({},t);return Object.keys(e).forEach((t=>{void 0===n[t]&&(n[t]=e[t])})),n}(t.components[n].defaultProps,o):o}({theme:(0,o.Z)(n),name:t,props:e})}({props:e,name:t,defaultTheme:i.Z})}},577:(e,t,n)=>{"use strict";n.d(t,{n:()=>r,C:()=>o});const r=e=>e.scrollTop;function o(e,t){var n,r;const{timeout:o,easing:i,style:a={}}=e;return{duration:null!=(n=a.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=a.transitionTimingFunction)?r:"object"==typeof i?i[t.mode]:i,delay:a.transitionDelay}}},8216:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(8320).Z},5949:(e,t,n)=>{"use strict";n.d(t,{Z:()=>b});var r=n(7462),o=n(2950),i=n(3366),a=n(6010),s=n(7192),l=n(8216),c=n(4368),u=n(7709),d=n(8979);function p(e){return(0,d.Z)("MuiSvgIcon",e)}(0,n(6087).Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var f=n(5893);const m=["children","className","color","component","fontSize","htmlColor","titleAccess","viewBox"],h=(0,u.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,l.Z)(n.color)}`],t[`fontSize${(0,l.Z)(n.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var n,r;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:"currentColor",flexShrink:0,transition:e.transitions.create("fill",{duration:e.transitions.duration.shorter}),fontSize:{inherit:"inherit",small:e.typography.pxToRem(20),medium:e.typography.pxToRem(24),large:e.typography.pxToRem(35)}[t.fontSize],color:null!=(n=null==(r=e.palette[t.color])?void 0:r.main)?n:{action:e.palette.action.active,disabled:e.palette.action.disabled,inherit:void 0}[t.color]}})),g=o.forwardRef((function(e,t){const n=(0,c.Z)({props:e,name:"MuiSvgIcon"}),{children:o,className:u,color:d="inherit",component:g="svg",fontSize:v="medium",htmlColor:b,titleAccess:y,viewBox:Z="0 0 24 24"}=n,x=(0,i.Z)(n,m),w=(0,r.Z)({},n,{color:d,component:g,fontSize:v,viewBox:Z}),S=(e=>{const{color:t,fontSize:n,classes:r}=e,o={root:["root","inherit"!==t&&`color${(0,l.Z)(t)}`,`fontSize${(0,l.Z)(n)}`]};return(0,s.Z)(o,p,r)})(w);return(0,f.jsxs)(h,(0,r.Z)({as:g,className:(0,a.Z)(S.root,u),ownerState:w,focusable:"false",viewBox:Z,color:b,"aria-hidden":!y||void 0,role:y?"img":void 0,ref:t},x,{children:[o,y?(0,f.jsx)("title",{children:y}):null]}))}));g.muiName="SvgIcon";const v=g;function b(e,t){const n=(n,o)=>(0,f.jsx)(v,(0,r.Z)({"data-testid":`${t}Icon`,ref:o},n,{children:e}));return n.muiName=v.muiName,o.memo(o.forwardRef(n))}},55:(e,t,n)=>{"use strict";n.r(t),n.d(t,{capitalize:()=>r.Z,createChainedFunction:()=>o,createSvgIcon:()=>i.Z,debounce:()=>a,deprecatedPropType:()=>s,isMuiElement:()=>l.Z,ownerDocument:()=>c,ownerWindow:()=>u,requirePropFactory:()=>d,setRef:()=>p,unstable_ClassNameGenerator:()=>x.Z,unstable_useEnhancedEffect:()=>f.Z,unstable_useId:()=>m,unsupportedProp:()=>h,useControlled:()=>v,useEventCallback:()=>b.Z,useForkRef:()=>y.Z,useIsFocusVisible:()=>Z.Z});var r=n(8216);const o=n(9064).Z;var i=n(5949);const a=function(e,t=166){let n;function r(...r){clearTimeout(n),n=setTimeout((()=>{e.apply(this,r)}),t)}return r.clear=()=>{clearTimeout(n)},r},s=function(e,t){return()=>null};var l=n(8502);const c=n(7094).Z,u=n(8290).Z;n(7462);const d=function(e,t){return()=>null},p=n(7960).Z;var f=n(8974);const m=n(7579).Z,h=function(e,t,n,r,o){return null};var g=n(2950);const v=function({controlled:e,default:t,name:n,state:r="value"}){const{current:o}=g.useRef(void 0!==e),[i,a]=g.useState(t);return[o?e:i,g.useCallback((e=>{o||a(e)}),[])]};var b=n(2068),y=n(1705),Z=n(3511),x=n(9981)},8502:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(2950);const o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},8974:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(6600).Z},2068:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(3633).Z},1705:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(67).Z},3511:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(2950);let o,i=!0,a=!1;const s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function l(e){e.metaKey||e.altKey||e.ctrlKey||(i=!0)}function c(){i=!1}function u(){"hidden"===this.visibilityState&&a&&(i=!0)}const d=function(){const e=r.useCallback((e=>{var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",l,!0),t.addEventListener("mousedown",c,!0),t.addEventListener("pointerdown",c,!0),t.addEventListener("touchstart",c,!0),t.addEventListener("visibilitychange",u,!0))}),[]),t=r.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!function(e){const{target:t}=e;try{return t.matches(":focus-visible")}catch(e){}return i||function(e){const{type:t,tagName:n}=e;return!("INPUT"!==n||!s[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,window.clearTimeout(o),o=window.setTimeout((()=>{a=!1}),100),t.current=!1,!0)},ref:e}}},4819:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=n(2950).createContext(null)},6760:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(2950),o=n(4819);function i(){return r.useContext(o.Z)}},4810:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s}),n(2950);var r=n(4880),o=n(6898),i=n(5893);const a=(0,o.Z)({key:"css",prepend:!0});function s(e){const{injectFirst:t,children:n}=e;return t?(0,i.jsx)(r.C,{value:a,children:n}):n}},5974:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(2950),o=n(7462),i=n(4819),a=n(6760);const s="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var l=n(5893);const c=function(e){const{children:t,theme:n}=e,c=(0,a.Z)(),u=r.useMemo((()=>{const e=null===c?n:function(e,t){return"function"==typeof t?t(e):(0,o.Z)({},e,t)}(c,n);return null!=e&&(e[s]=null!==c),e}),[n,c]);return(0,l.jsx)(i.Z.Provider,{value:u,children:t})};var u=n(4880),d=n(6631);function p(e){const t=(0,d.Z)();return(0,l.jsx)(u.T.Provider,{value:"object"==typeof t?t:{},children:e.children})}const f=function(e){const{children:t,theme:n}=e;return(0,l.jsx)(c,{theme:n,children:(0,l.jsx)(p,{children:t})})}},5408:(e,t,n)=>{"use strict";n.d(t,{VO:()=>r,k9:()=>i,W8:()=>a,L7:()=>s});const r={xs:0,sm:600,md:900,lg:1200,xl:1536},o={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${r[e]}px)`};function i(e,t,n){const i=e.theme||{};if(Array.isArray(t)){const e=i.breakpoints||o;return t.reduce(((r,o,i)=>(r[e.up(e.keys[i])]=n(t[i]),r)),{})}if("object"==typeof t){const e=i.breakpoints||o;return Object.keys(t).reduce(((o,i)=>{if(-1!==Object.keys(e.values||r).indexOf(i))o[e.up(i)]=n(t[i],i);else{const e=i;o[e]=t[e]}return o}),{})}return n(t)}function a(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,n)=>(t[e.up(n)]={},t)),{}))||{}}function s(e,t){return e.reduce(((e,t)=>{const n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}},1796:(e,t,n)=>{"use strict";n.d(t,{mi:()=>l,Fq:()=>c,_j:()=>u,$n:()=>d,_4:()=>p});var r=n(1387);function o(e,t=0,n=1){return Math.min(Math.max(t,e),n)}function i(e){if(e.type)return e;if("#"===e.charAt(0))return i(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let n=e.match(t);return n&&1===n[0].length&&(n=n.map((e=>e+e))),n?`rgb${4===n.length?"a":""}(${n.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.Z)(9,e));let o,a=e.substring(t+1,e.length-1);if("color"===n){if(a=a.split(" "),o=a.shift(),4===a.length&&"/"===a[3].charAt(0)&&(a[3]=a[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,r.Z)(10,o))}else a=a.split(",");return a=a.map((e=>parseFloat(e))),{type:n,values:a,colorSpace:o}}function a(e){const{type:t,colorSpace:n}=e;let{values:r}=e;return-1!==t.indexOf("rgb")?r=r.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(r[1]=`${r[1]}%`,r[2]=`${r[2]}%`),r=-1!==t.indexOf("color")?`${n} ${r.join(" ")}`:`${r.join(", ")}`,`${t}(${r})`}function s(e){let t="hsl"===(e=i(e)).type?i(function(e){e=i(e);const{values:t}=e,n=t[0],r=t[1]/100,o=t[2]/100,s=r*Math.min(o,1-o),l=(e,t=(e+n/30)%12)=>o-s*Math.max(Math.min(t-3,9-t,1),-1);let c="rgb";const u=[Math.round(255*l(0)),Math.round(255*l(8)),Math.round(255*l(4))];return"hsla"===e.type&&(c+="a",u.push(t[3])),a({type:c,values:u})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function l(e,t){const n=s(e),r=s(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function c(e,t){return e=i(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,a(e)}function u(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]*=1-t;return a(e)}function d(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(let n=0;n<3;n+=1)e.values[n]+=(1-e.values[n])*t;return a(e)}function p(e,t=.15){return s(e)>.5?u(e,t):d(e,t)}},6268:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(3366),i=n(9766);const a=["values","unit","step"];const s={borderRadius:4};var l=n(2605);const c=["breakpoints","palette","spacing","shape"],u=function(e={},...t){const{breakpoints:n={},palette:u={},spacing:d,shape:p={}}=e,f=(0,o.Z)(e,c),m=function(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:n="px",step:i=5}=e,s=(0,o.Z)(e,a),l=(e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,r.Z)({},e,{[t.key]:t.val})),{})})(t),c=Object.keys(l);function u(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n})`}function d(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-i/100}${n})`}function p(e,r){const o=c.indexOf(r);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${n}) and (max-width:${(-1!==o&&"number"==typeof t[c[o]]?t[c[o]]:r)-i/100}${n})`}return(0,r.Z)({keys:c,values:l,up:u,down:d,between:p,only:function(e){return c.indexOf(e)+1(0===e.length?[1]:e).map((e=>{const n=t(e);return"number"==typeof n?`${n}px`:n})).join(" ");return n.mui=!0,n}(d);let g=(0,i.Z)({breakpoints:m,direction:"ltr",components:{},palette:(0,r.Z)({mode:"light"},u),spacing:h,shape:(0,r.Z)({},s,p)},f);return g=t.reduce(((e,t)=>(0,i.Z)(e,t)),g),g}},6977:(e,t,n)=>{"use strict";n.d(t,{Gc:()=>U,G$:()=>q});var r=n(4844),o=n(7730);const i=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((n=>{e[n]=t})),e)),{}),n=e=>Object.keys(e).reduce(((n,r)=>t[r]?(0,o.Z)(n,t[r](e)):n),{});return n.propTypes={},n.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),n};var a=n(2605),s=n(5408);function l(e){return"number"!=typeof e?e:`${e}px solid`}const c=(0,r.Z)({prop:"border",themeKey:"borders",transform:l}),u=(0,r.Z)({prop:"borderTop",themeKey:"borders",transform:l}),d=(0,r.Z)({prop:"borderRight",themeKey:"borders",transform:l}),p=(0,r.Z)({prop:"borderBottom",themeKey:"borders",transform:l}),f=(0,r.Z)({prop:"borderLeft",themeKey:"borders",transform:l}),m=(0,r.Z)({prop:"borderColor",themeKey:"palette"}),h=(0,r.Z)({prop:"borderTopColor",themeKey:"palette"}),g=(0,r.Z)({prop:"borderRightColor",themeKey:"palette"}),v=(0,r.Z)({prop:"borderBottomColor",themeKey:"palette"}),b=(0,r.Z)({prop:"borderLeftColor",themeKey:"palette"}),y=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,a.eI)(e.theme,"shape.borderRadius",4,"borderRadius"),n=e=>({borderRadius:(0,a.NA)(t,e)});return(0,s.k9)(e,e.borderRadius,n)}return null};y.propTypes={},y.filterProps=["borderRadius"];const Z=i(c,u,d,p,f,m,h,g,v,b,y),x=i((0,r.Z)({prop:"displayPrint",cssProperty:!1,transform:e=>({"@media print":{display:e}})}),(0,r.Z)({prop:"display"}),(0,r.Z)({prop:"overflow"}),(0,r.Z)({prop:"textOverflow"}),(0,r.Z)({prop:"visibility"}),(0,r.Z)({prop:"whiteSpace"})),w=i((0,r.Z)({prop:"flexBasis"}),(0,r.Z)({prop:"flexDirection"}),(0,r.Z)({prop:"flexWrap"}),(0,r.Z)({prop:"justifyContent"}),(0,r.Z)({prop:"alignItems"}),(0,r.Z)({prop:"alignContent"}),(0,r.Z)({prop:"order"}),(0,r.Z)({prop:"flex"}),(0,r.Z)({prop:"flexGrow"}),(0,r.Z)({prop:"flexShrink"}),(0,r.Z)({prop:"alignSelf"}),(0,r.Z)({prop:"justifyItems"}),(0,r.Z)({prop:"justifySelf"})),S=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,a.eI)(e.theme,"spacing",8,"gap"),n=e=>({gap:(0,a.NA)(t,e)});return(0,s.k9)(e,e.gap,n)}return null};S.propTypes={},S.filterProps=["gap"];const k=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,a.eI)(e.theme,"spacing",8,"columnGap"),n=e=>({columnGap:(0,a.NA)(t,e)});return(0,s.k9)(e,e.columnGap,n)}return null};k.propTypes={},k.filterProps=["columnGap"];const E=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,a.eI)(e.theme,"spacing",8,"rowGap"),n=e=>({rowGap:(0,a.NA)(t,e)});return(0,s.k9)(e,e.rowGap,n)}return null};E.propTypes={},E.filterProps=["rowGap"];const R=i(S,k,E,(0,r.Z)({prop:"gridColumn"}),(0,r.Z)({prop:"gridRow"}),(0,r.Z)({prop:"gridAutoFlow"}),(0,r.Z)({prop:"gridAutoColumns"}),(0,r.Z)({prop:"gridAutoRows"}),(0,r.Z)({prop:"gridTemplateColumns"}),(0,r.Z)({prop:"gridTemplateRows"}),(0,r.Z)({prop:"gridTemplateAreas"}),(0,r.Z)({prop:"gridArea"})),C=i((0,r.Z)({prop:"position"}),(0,r.Z)({prop:"zIndex",themeKey:"zIndex"}),(0,r.Z)({prop:"top"}),(0,r.Z)({prop:"right"}),(0,r.Z)({prop:"bottom"}),(0,r.Z)({prop:"left"})),P=i((0,r.Z)({prop:"color",themeKey:"palette"}),(0,r.Z)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette"}),(0,r.Z)({prop:"backgroundColor",themeKey:"palette"})),M=(0,r.Z)({prop:"boxShadow",themeKey:"shadows"});function T(e){return e<=1&&0!==e?100*e+"%":e}const A=(0,r.Z)({prop:"width",transform:T}),$=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var n,r,o;return{maxWidth:(null==(n=e.theme)||null==(r=n.breakpoints)||null==(o=r.values)?void 0:o[t])||s.VO[t]||T(t)}};return(0,s.k9)(e,e.maxWidth,t)}return null};$.filterProps=["maxWidth"];const O=(0,r.Z)({prop:"minWidth",transform:T}),j=(0,r.Z)({prop:"height",transform:T}),I=(0,r.Z)({prop:"maxHeight",transform:T}),N=(0,r.Z)({prop:"minHeight",transform:T}),z=((0,r.Z)({prop:"size",cssProperty:"width",transform:T}),(0,r.Z)({prop:"size",cssProperty:"height",transform:T}),i(A,$,O,j,I,N,(0,r.Z)({prop:"boxSizing"}))),L=(0,r.Z)({prop:"fontFamily",themeKey:"typography"}),F=(0,r.Z)({prop:"fontSize",themeKey:"typography"}),B=(0,r.Z)({prop:"fontStyle",themeKey:"typography"}),_=(0,r.Z)({prop:"fontWeight",themeKey:"typography"}),D=(0,r.Z)({prop:"letterSpacing"}),W=(0,r.Z)({prop:"textTransform"}),V=(0,r.Z)({prop:"lineHeight"}),H=(0,r.Z)({prop:"textAlign"}),G=i((0,r.Z)({prop:"typography",cssProperty:!1,themeKey:"typography"}),L,F,B,_,D,V,H,W),K={borders:Z.filterProps,display:x.filterProps,flexbox:w.filterProps,grid:R.filterProps,positions:C.filterProps,palette:P.filterProps,shadows:M.filterProps,sizing:z.filterProps,spacing:a.ZP.filterProps,typography:G.filterProps},q={borders:Z,display:x,flexbox:w,grid:R,positions:C,palette:P,shadows:M,sizing:z,spacing:a.ZP,typography:G},U=Object.keys(K).reduce(((e,t)=>(K[t].forEach((n=>{e[n]=q[t]})),e)),{})},7730:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(9766);const o=function(e,t){return t?(0,r.Z)(e,t,{clone:!1}):e}},2605:(e,t,n)=>{"use strict";n.d(t,{hB:()=>m,eI:()=>f,ZP:()=>Z,NA:()=>h});var r=n(5408),o=n(4844),i=n(7730);const a={m:"margin",p:"padding"},s={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},l={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},c=function(e){const t={};return e=>(void 0===t[e]&&(t[e]=(e=>{if(e.length>2){if(!l[e])return[e];e=l[e]}const[t,n]=e.split(""),r=a[t],o=s[n]||"";return Array.isArray(o)?o.map((e=>r+e)):[r+o]})(e)),t[e])}(),u=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],d=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],p=[...u,...d];function f(e,t,n,r){var i;const a=null!=(i=(0,o.D)(e,t,!1))?i:n;return"number"==typeof a?e=>"string"==typeof e?e:a*e:Array.isArray(a)?e=>"string"==typeof e?e:a[e]:"function"==typeof a?a:()=>{}}function m(e){return f(e,"spacing",8)}function h(e,t){if("string"==typeof t||null==t)return t;const n=e(Math.abs(t));return t>=0?n:"number"==typeof n?-n:`-${n}`}function g(e,t){const n=m(e.theme);return Object.keys(e).map((o=>function(e,t,n,o){if(-1===t.indexOf(n))return null;const i=function(e,t){return n=>e.reduce(((e,r)=>(e[r]=h(t,n),e)),{})}(c(n),o),a=e[n];return(0,r.k9)(e,a,i)}(e,t,o,n))).reduce(i.Z,{})}function v(e){return g(e,u)}function b(e){return g(e,d)}function y(e){return g(e,p)}v.propTypes={},v.filterProps=u,b.propTypes={},b.filterProps=d,y.propTypes={},y.filterProps=p;const Z=y},4844:(e,t,n)=>{"use strict";n.d(t,{D:()=>i,Z:()=>s});var r=n(8320),o=n(5408);function i(e,t,n=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&n){const n=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=n)return n}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function a(e,t,n,r=n){let o;return o="function"==typeof e?e(n):Array.isArray(e)?e[n]||r:i(e,n)||r,t&&(o=t(o)),o}const s=function(e){const{prop:t,cssProperty:n=e.prop,themeKey:s,transform:l}=e,c=e=>{if(null==e[t])return null;const c=e[t],u=i(e.theme,s)||{};return(0,o.k9)(e,c,(e=>{let o=a(u,l,e);return e===o&&"string"==typeof e&&(o=a(u,l,`${t}${"default"===e?"":(0,r.Z)(e)}`,e)),!1===n?o:{[n]:o}}))};return c.propTypes={},c.filterProps=[t],c}},6631:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(6268),o=n(6760);const i=(0,r.Z)(),a=function(e=i){return function(e=null){const t=(0,o.Z)();return t&&(n=t,0!==Object.keys(n).length)?t:e;var n}(e)}},8320:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(1387);function o(e){if("string"!=typeof e)throw new Error((0,r.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},9064:(e,t,n)=>{"use strict";function r(...e){return e.reduce(((e,t)=>null==t?e:function(...n){e.apply(this,n),t.apply(this,n)}),(()=>{}))}n.d(t,{Z:()=>r})},9766:(e,t,n)=>{"use strict";n.d(t,{P:()=>o,Z:()=>i});var r=n(7462);function o(e){return null!==e&&"object"==typeof e&&e.constructor===Object}function i(e,t,n={clone:!0}){const a=n.clone?(0,r.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((r=>{"__proto__"!==r&&(o(t[r])&&r in e&&o(e[r])?a[r]=i(e[r],t[r],n):a[r]=t[r])})),a}},1387:(e,t,n)=>{"use strict";function r(e){let t="https://mui.com/production-error/?code="+e;for(let e=1;er})},7094:(e,t,n)=>{"use strict";function r(e){return e&&e.ownerDocument||document}n.d(t,{Z:()=>r})},8290:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7094);function o(e){return(0,r.Z)(e).defaultView||window}},7960:(e,t,n)=>{"use strict";function r(e,t){"function"==typeof e?e(t):e&&(e.current=t)}n.d(t,{Z:()=>r})},6600:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(2950);const o="undefined"!=typeof window?r.useLayoutEffect:r.useEffect},3633:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(2950),o=n(6600);function i(e){const t=r.useRef(e);return(0,o.Z)((()=>{t.current=e})),r.useCallback(((...e)=>(0,t.current)(...e)),[])}},67:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(2950),o=n(7960);function i(e,t){return r.useMemo((()=>null==e&&null==t?null:n=>{(0,o.Z)(e,n),(0,o.Z)(t,n)}),[e,t])}},7579:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(2950);let o=0;const i=r.useId;function a(e){if(void 0!==i){const t=i();return null!=e?e:t}return function(e){const[t,n]=r.useState(e),i=e||t;return r.useEffect((()=>{null==t&&(o+=1,n(`mui-${o}`))}),[t]),i}(e)}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?a:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=a;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var a=u(n);d&&(a=a.concat(d(n)));for(var s=l(t),h=l(n),g=0;g{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var a,s,l=o(e),c=1;c{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,Z=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case i:case s:case a:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function w(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=i,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=a,t.Suspense=f,t.isAsyncMode=function(e){return w(e)||x(e)===u},t.isConcurrentMode=w,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===i},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===h},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===s},t.isStrictMode=function(e){return x(e)===a},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===d||e===s||e===a||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===b||e.$$typeof===y||e.$$typeof===Z||e.$$typeof===v)},t.typeOf=x},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8052:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>v});var r=n(3366),o=n(4578),i=n(2950),a=n.n(i),s=n(2181),l=n.n(s);var c=n(220),u="unmounted",d="exited",p="entering",f="entered",m="exiting",h=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=d,r.appearStatus=p):o=f:o=t.unmountOnExit||t.mountOnEnter?u:d,r.state={status:o},r.nextCallback=null,r}(0,o.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===u?{status:d}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==p&&n!==f&&(t=p):n!==p&&n!==f||(t=m)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===p){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:l().findDOMNode(this);n&&function(e){e.scrollTop}(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===d&&this.setState({status:u})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[l().findDOMNode(this),r],i=o[0],a=o[1],s=this.getTimeouts(),c=r?s.appear:s.enter;e||n?(this.props.onEnter(i,a),this.safeSetState({status:p},(function(){t.props.onEntering(i,a),t.onTransitionEnd(c,(function(){t.safeSetState({status:f},(function(){t.props.onEntered(i,a)}))}))}))):this.safeSetState({status:f},(function(){t.props.onEntered(i)}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:l().findDOMNode(this);t?(this.props.onExit(r),this.safeSetState({status:m},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:d},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:d},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:l().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],a=o[1];this.props.addEndListener(i,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===u)return null;var t=this.props,n=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,r.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return a().createElement(c.Z.Provider,{value:null},"function"==typeof n?n(e,o):a().cloneElement(a().Children.only(n),o))},t}(a().Component);function g(){}h.contextType=c.Z,h.propTypes={},h.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:g,onEntering:g,onEntered:g,onExit:g,onExiting:g,onExited:g},h.UNMOUNTED=u,h.EXITED=d,h.ENTERING=p,h.ENTERED=f,h.EXITING=m;const v=h},220:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(2950);const o=n.n(r)().createContext(null)},5251:(e,t,n)=>{"use strict";n(7418);var r=n(2950),o=60103;if(t.Fragment=60107,"function"==typeof Symbol&&Symbol.for){var i=Symbol.for;o=i("react.element"),t.Fragment=i("react.fragment")}var a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s=Object.prototype.hasOwnProperty,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)s.call(t,r)&&!l.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:a.current}}t.jsx=c,t.jsxs=c},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},4836:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},7326:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;tr})},4578:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(9611);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,r.Z)(e,t)}},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},9611:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}n.d(t,{Z:()=>r})}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUks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aGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QcmVmaXhlci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LWNiZWQ0NTFmLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC9lbW90aW9uLXVuaXRsZXNzLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvZW1vdGlvbi1pcy1wcm9wLXZhbGlkLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9kaXN0L2Vtb3Rpb24tc3R5bGVkLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9nZW5lcmF0ZVV0aWxpdHlDbGFzcy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS91dGlscy9pc0hvc3RDb21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BY2NvdW50QmFsYW5jZVdhbGxldC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL0F0dGFjaE1vbmV5LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ3VycmVuY3lCaXRjb2luLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ3VycmVuY3lFeGNoYW5nZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL1NlbGwuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9TdWJkaXJlY3RvcnlBcnJvd1JpZ2h0LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvVGltZWxpbmUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQWxlcnQvYWxlcnRDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbi9pY29uQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9TdWNjZXNzT3V0bGluZWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUmVwb3J0UHJvYmxlbU91dGxpbmVkLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0Vycm9yT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9JbmZvT3V0bGluZWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQ2xvc2UuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9BbGVydC9BbGVydC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9QZXJzb24uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9BdmF0YXIvYXZhdGFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0F2YXRhci9BdmF0YXIuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3R0b21OYXZpZ2F0aW9uL2JvdHRvbU5hdmlnYXRpb25DbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm90dG9tTmF2aWdhdGlvbi9Cb3R0b21OYXZpZ2F0aW9uLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm90dG9tTmF2aWdhdGlvbkFjdGlvbi9ib3R0b21OYXZpZ2F0aW9uQWN0aW9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JvdHRvbU5hdmlnYXRpb25BY3Rpb24vQm90dG9tTmF2aWdhdGlvbkFjdGlvbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9idXR0b25DbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvdG91Y2hSaXBwbGVDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9Ub3VjaFJpcHBsZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvQnV0dG9uQmFzZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvUG9ydGFsL1BvcnRhbC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL2Jhc2UvTW9kYWxVbnN0eWxlZC9Nb2RhbE1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL1Vuc3RhYmxlX1RyYXBGb2N1cy9VbnN0YWJsZV9UcmFwRm9jdXMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL01vZGFsVW5zdHlsZWQvbW9kYWxVbnN0eWxlZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9iYXNlL01vZGFsVW5zdHlsZWQvTW9kYWxVbnN0eWxlZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9CYWNrZHJvcFVuc3R5bGVkL2JhY2tkcm9wVW5zdHlsZWRDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9CYWNrZHJvcFVuc3R5bGVkL0JhY2tkcm9wVW5zdHlsZWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GYWRlL0ZhZGUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CYWNrZHJvcC9CYWNrZHJvcC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nL2RpYWxvZ0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EaWFsb2cvRGlhbG9nLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nL0RpYWxvZ0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EaWFsb2dBY3Rpb25zL2RpYWxvZ0FjdGlvbnNDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nQWN0aW9ucy9EaWFsb2dBY3Rpb25zLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nQ29udGVudC9kaWFsb2dDb250ZW50Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpYWxvZ0NvbnRlbnQvRGlhbG9nQ29udGVudC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpYWxvZ1RpdGxlL0RpYWxvZ1RpdGxlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGlhbG9nVGl0bGUvZGlhbG9nVGl0bGVDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRGl2aWRlci9kaXZpZGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RpdmlkZXIvRGl2aWRlci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Hcm91cC9mb3JtR3JvdXBDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUdyb3VwL0Zvcm1Hcm91cC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QWRvcm5tZW50L2lucHV0QWRvcm5tZW50Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QWRvcm5tZW50L0lucHV0QWRvcm5tZW50LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L2xpc3RDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtL2xpc3RJdGVtQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uL2xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uL0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW0vTGlzdEl0ZW0uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbUF2YXRhci9saXN0SXRlbUF2YXRhckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbUF2YXRhci9MaXN0SXRlbUF2YXRhci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtVGV4dC9saXN0SXRlbVRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1UZXh0L0xpc3RJdGVtVGV4dC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL3BhcGVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvYmFzZS9DbGlja0F3YXlMaXN0ZW5lci9DbGlja0F3YXlMaXN0ZW5lci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NuYWNrYmFyQ29udGVudC9zbmFja2JhckNvbnRlbnRDbGFzc2VzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU25hY2tiYXJDb250ZW50L1NuYWNrYmFyQ29udGVudC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NuYWNrYmFyL3NuYWNrYmFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NuYWNrYmFyL1NuYWNrYmFyLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvYmx1ZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3NoYWRvd3MuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRoZW1lLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3Byb3BzVG9DbGFzc0tleS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWVQcm9wcy91c2VUaGVtZVByb3BzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL2dldFRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vcmVzb2x2ZVByb3BzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZVN2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlcHJlY2F0ZWRQcm9wVHlwZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZXByZWNhdGVkUHJvcFR5cGUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lckRvY3VtZW50LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vcmVxdWlyZVByb3BGYWN0b3J5LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvc2V0UmVmLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91bnN1cHBvcnRlZFByb3AuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdW5zdXBwb3J0ZWRQcm9wLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzTXVpRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUZvcmtSZWYuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlSXNGb2N1c1Zpc2libGUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvdXNlVGhlbWUvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvbmVzdGVkLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9icmVha3BvaW50cy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY29sb3JNYW5pcHVsYXRvci5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL3NoYXBlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY29tcG9zZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vZGlzcGxheS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vZmxleGJveC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcG9zaXRpb25zLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9wYWxldHRlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaGFkb3dzLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3R5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2dldFRoZW1lVmFsdWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL21lcmdlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zcGFjaW5nLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWVXaXRob3V0RGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZGVlcG1lcmdlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9vd25lckRvY3VtZW50LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL293bmVyV2luZG93LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3NldFJlZi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VFbmhhbmNlZEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VFdmVudENhbGxiYWNrLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUZvcmtSZWYuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlSWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvY2xzeC9kaXN0L2Nsc3gubS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCDinaTvuI9cblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cbi8vICRGbG93Rml4TWVcbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFVzaW5nIE5vZGUgaW5zdGVhZCBvZiBIVE1MRWxlbWVudCBzaW5jZSBjb250YWluZXIgbWF5IGJlIGEgU2hhZG93Um9vdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faW5zZXJ0VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKF90aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChfdGhpcy5pbnNlcnRpb25Qb2ludCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzLnByZXBlbmQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5iZWZvcmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IF90aGlzLnRhZ3NbX3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZSh0YWcsIGJlZm9yZSk7XG5cbiAgICAgIF90aGlzLnRhZ3MucHVzaCh0YWcpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGlzSW1wb3J0UnVsZSA9IHJ1bGUuY2hhckNvZGVBdCgwKSA9PT0gNjQgJiYgcnVsZS5jaGFyQ29kZUF0KDEpID09PSAxMDU7XG5cbiAgICAgIGlmIChpc0ltcG9ydFJ1bGUgJiYgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUpIHtcbiAgICAgICAgLy8gdGhpcyB3b3VsZCBvbmx5IGNhdXNlIHByb2JsZW0gaW4gc3BlZWR5IG1vZGVcbiAgICAgICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgZW5hYmxpbmcgc3BlZWR5IHRvIGFmZmVjdCB0aGUgb2JzZXJ2YWJsZSBiZWhhdmlvclxuICAgICAgICAvLyBzbyB3ZSByZXBvcnQgdGhpcyBlcnJvciBhdCBhbGwgdGltZXNcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSdyZSBhdHRlbXB0aW5nIHRvIGluc2VydCB0aGUgZm9sbG93aW5nIHJ1bGU6XFxuXCIgKyBydWxlICsgJ1xcblxcbmBAaW1wb3J0YCBydWxlcyBtdXN0IGJlIGJlZm9yZSBhbGwgb3RoZXIgdHlwZXMgb2YgcnVsZXMgaW4gYSBzdHlsZXNoZWV0IGJ1dCBvdGhlciBydWxlcyBoYXZlIGFscmVhZHkgYmVlbiBpbnNlcnRlZC4gUGxlYXNlIGVuc3VyZSB0aGF0IGBAaW1wb3J0YCBydWxlcyBhcmUgYmVmb3JlIGFsbCBvdGhlciBydWxlcy4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlID0gdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgfHwgIWlzSW1wb3J0UnVsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEvOigtbW96LXBsYWNlaG9sZGVyfC1tb3otZm9jdXMtaW5uZXJ8LW1vei1mb2N1c3Jpbmd8LW1zLWlucHV0LXBsYWNlaG9sZGVyfC1tb3otcmVhZC13cml0ZXwtbW96LXJlYWQtb25seXwtbXMtY2xlYXIpey8udGVzdChydWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUgJiYgdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuIiwiaW1wb3J0IHtJTVBPUlQsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVH0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgcmVwbGFjZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuXHRcdC8vIGNvbG9yLWFkanVzdFxuXHRcdGNhc2UgNTEwMzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblx0XHRjYXNlIDU3Mzc6IGNhc2UgNDIwMTogY2FzZSAzMTc3OiBjYXNlIDM0MzM6IGNhc2UgMTY0MTogY2FzZSA0NDU3OiBjYXNlIDI5MjE6XG5cdFx0Ly8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXHRcdGNhc2UgNTU3MjogY2FzZSA2MzU2OiBjYXNlIDU4NDQ6IGNhc2UgMzE5MTogY2FzZSA2NjQ1OiBjYXNlIDMwMDU6XG5cdFx0Ly8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cdFx0Y2FzZSA2MzkxOiBjYXNlIDU4Nzk6IGNhc2UgNTYyMzogY2FzZSA2MTM1OiBjYXNlIDQ1OTk6IGNhc2UgNDg1NTpcblx0XHQvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXHRcdGNhc2UgNDIxNTogY2FzZSA2Mzg5OiBjYXNlIDUxMDk6IGNhc2UgNTM2NTogY2FzZSA1NjIxOiBjYXNlIDM4Mjk6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3Rcblx0XHRjYXNlIDUzNDk6IGNhc2UgNDI0NjogY2FzZSA0ODEwOiBjYXNlIDY5Njg6IGNhc2UgMjc1Njpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gZmxleCwgZmxleC1kaXJlY3Rpb25cblx0XHRjYXNlIDY4Mjg6IGNhc2UgNDI2ODpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIG9yZGVyXG5cdFx0Y2FzZSA2MTY1OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWl0ZW1zXG5cdFx0Y2FzZSA1MTg3OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tc2VsZlxuXHRcdGNhc2UgNTQ0Mzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1jb250ZW50XG5cdFx0Y2FzZSA0Njc1OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtc2hyaW5rXG5cdFx0Y2FzZSA1NTQ4OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtYmFzaXNcblx0XHRjYXNlIDUyOTI6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWVcblx0XHQvLyBmbGV4LWdyb3dcblx0XHRjYXNlIDYwNjA6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIHRyYW5zaXRpb25cblx0XHRjYXNlIDQ1NTQ6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlXG5cdFx0Ly8gY3Vyc29yXG5cdFx0Y2FzZSA2MTg3OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWVcblx0XHQvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cdFx0Y2FzZSA1NDk1OiBjYXNlIDM5NTk6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpXG5cdFx0Ly8ganVzdGlmeS1jb250ZW50XG5cdFx0Y2FzZSA0OTY4OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblx0XHRjYXNlIDQwOTU6IGNhc2UgMzU4MzogY2FzZSA0MDY4OiBjYXNlIDI1MzI6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZVxuXHRcdC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cdFx0Y2FzZSA4MTE2OiBjYXNlIDcwNTk6IGNhc2UgNTc1MzogY2FzZSA1NTM1OlxuXHRcdGNhc2UgNTQ0NTogY2FzZSA1NzAxOiBjYXNlIDQ5MzM6IGNhc2UgNDY3Nzpcblx0XHRjYXNlIDU1MzM6IGNhc2UgNTc4OTogY2FzZSA1MDIxOiBjYXNlIDQ3NjU6XG5cdFx0XHQvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG5cdFx0XHRpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KVxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcblx0XHRcdFx0XHQvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDk6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlXG5cdFx0XHRcdFx0Ly8gKHMpdHJldGNoXG5cdFx0XHRcdFx0Y2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHQvLyBwb3NpdGlvbjogc3RpY2t5XG5cdFx0Y2FzZSA0OTQ5OlxuXHRcdFx0Ly8gKHMpdGlja3k/XG5cdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KVxuXHRcdFx0XHRicmVha1xuXHRcdC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXHRcdGNhc2UgNjQ0NDpcblx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG5cdFx0XHRcdC8vIHN0aWMoayl5XG5cdFx0XHRcdGNhc2UgMTA3OlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZVxuXHRcdFx0XHQvLyAoaW5saW5lLSk/ZmwoZSl4XG5cdFx0XHRcdGNhc2UgMTAxOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZVxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHQvLyB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDU5MzY6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG5cdFx0XHRcdC8vIHZlcnRpY2FsLWwocilcblx0XHRcdFx0Y2FzZSAxMTQ6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWVcblx0XHRcdFx0Ly8gdmVydGljYWwtcihsKVxuXHRcdFx0XHRjYXNlIDEwODpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBob3Jpem9udGFsKC0pdGJcblx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0fVxuXG5cdHJldHVybiB2YWx1ZVxufVxuIiwiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhY3RlcnMuY2hhckNvZGVBdChsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIHN0cmluZ2lmeSwgQ09NTUVOVCwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBwcmVmaXhlciwgc2VyaWFsaXplLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBsYXN0ID0gZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgcmV0dXJuIGFyci5sZW5ndGggPyBhcnJbYXJyLmxlbmd0aCAtIDFdIDogbnVsbDtcbn07IC8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90aHlzdWx0YW4vc3R5bGlzLmpzL2Jsb2IvZTY4NDNjMzczZWJjYmJmYWRlMjVlYmNjMjNmNTQwZWQ4NTA4ZGEwYS9zcmMvVG9rZW5pemVyLmpzI0wyMzktTDI0NFxuXG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlLFxuICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcbnZhciBpZ25vcmVGbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG5cbnZhciBpc0lnbm9yaW5nQ29tbWVudCA9IGZ1bmN0aW9uIGlzSWdub3JpbmdDb21tZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnKSByZXR1cm47XG4gICAgdmFyIHVuc2FmZVBzZXVkb0NsYXNzZXMgPSBlbGVtZW50LnZhbHVlLm1hdGNoKC8oOmZpcnN0fDpudGh8Om50aC1sYXN0KS1jaGlsZC9nKTtcblxuICAgIGlmICh1bnNhZmVQc2V1ZG9DbGFzc2VzICYmIGNhY2hlLmNvbXBhdCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZFbGVtZW50ID0gaW5kZXggPiAwID8gY2hpbGRyZW5baW5kZXggLSAxXSA6IG51bGw7XG5cbiAgICAgIGlmIChwcmV2RWxlbWVudCAmJiBpc0lnbm9yaW5nQ29tbWVudChsYXN0KHByZXZFbGVtZW50LmNoaWxkcmVuKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1bnNhZmVQc2V1ZG9DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKHVuc2FmZVBzZXVkb0NsYXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgcHNldWRvIGNsYXNzIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzICsgXCJcXFwiIGlzIHBvdGVudGlhbGx5IHVuc2FmZSB3aGVuIGRvaW5nIHNlcnZlci1zaWRlIHJlbmRlcmluZy4gVHJ5IGNoYW5naW5nIGl0IHRvIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzLnNwbGl0KCctY2hpbGQnKVswXSArIFwiLW9mLXR5cGVcXFwiLlwiKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBpc0ltcG9ydFJ1bGUgPSBmdW5jdGlvbiBpc0ltcG9ydFJ1bGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMSkgPT09IDEwNSAmJiBlbGVtZW50LnR5cGUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7XG59O1xuXG52YXIgaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzID0gZnVuY3Rpb24gaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICghaXNJbXBvcnRSdWxlKGNoaWxkcmVuW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTsgLy8gdXNlIHRoaXMgdG8gcmVtb3ZlIGluY29ycmVjdCBlbGVtZW50cyBmcm9tIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuLy8gc28gdGhleSBkb24ndCBnZXQgaGFuZGVkIHRvIHRoZSBgc2hlZXRgIChvciBhbnl0aGluZyBlbHNlKVxuLy8gYXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGFkZGl0aW9uYWwgbG9ncyB3aGljaCBpbiB0dXJuIGNvdWxkIGJlIG92ZXJoZWxtaW5nIHRvIHRoZSB1c2VyXG5cblxudmFyIG51bGxpZnlFbGVtZW50ID0gZnVuY3Rpb24gbnVsbGlmeUVsZW1lbnQoZWxlbWVudCkge1xuICBlbGVtZW50LnR5cGUgPSAnJztcbiAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gIGVsZW1lbnQuY2hpbGRyZW4gPSAnJztcbiAgZWxlbWVudC5wcm9wcyA9ICcnO1xufTtcblxudmFyIGluY29ycmVjdEltcG9ydEFsYXJtID0gZnVuY3Rpb24gaW5jb3JyZWN0SW1wb3J0QWxhcm0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gIGlmICghaXNJbXBvcnRSdWxlKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBuZXN0ZWQgaW5zaWRlIG90aGVyIHJ1bGVzLiBQbGVhc2UgbW92ZSBpdCB0byB0aGUgdG9wIGxldmVsIGFuZCBwdXQgaXQgYmVmb3JlIHJlZ3VsYXIgcnVsZXMuIEtlZXAgaW4gbWluZCB0aGF0IHRoZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gZ2xvYmFsIHN0eWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSBpZiAoaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiYEBpbXBvcnRgIHJ1bGVzIGNhbid0IGJlIGFmdGVyIG90aGVyIHJ1bGVzLiBQbGVhc2UgcHV0IHlvdXIgYEBpbXBvcnRgIHJ1bGVzIGJlZm9yZSB5b3VyIG90aGVyIHJ1bGVzLlwiKTtcbiAgICBudWxsaWZ5RWxlbWVudChlbGVtZW50KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBoYXZlIHRvIGNvbmZpZ3VyZSBga2V5YCBmb3IgeW91ciBjYWNoZS4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHVuaXF1ZSAoYW5kIG5vdCBlcXVhbCB0byAnY3NzJykgYXMgaXQncyB1c2VkIGZvciBsaW5raW5nIHN0eWxlcyB0byB5b3VyIGNhY2hlLlxcblwiICsgXCJJZiBtdWx0aXBsZSBjYWNoZXMgc2hhcmUgdGhlIHNhbWUga2V5IHRoZXkgbWlnaHQgXFxcImZpZ2h0XFxcIiBmb3IgZWFjaCBvdGhlcidzIHN0eWxlIGVsZW1lbnRzLlwiKTtcbiAgfVxuXG4gIGlmICgga2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2FjaGU7XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIGZvcndhcmRSZWYsIGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcblxudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBFbW90aW9uQ2FjaGVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DYWNoZUNvbnRleHQnO1xufVxuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIC8vICRGbG93Rml4TWVcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgLy8gdGhlIGNhY2hlIHdpbGwgbmV2ZXIgYmUgbnVsbCBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBjYWNoZSA9IHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG4gICAgcmV0dXJuIGZ1bmMocHJvcHMsIGNhY2hlLCByZWYpO1xuICB9KTtcbn07XG5cbnZhciBUaGVtZUNvbnRleHQgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgVGhlbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25UaGVtZUNvbnRleHQnO1xufVxuXG52YXIgdXNlVGhlbWUgPSBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbn07XG5cbnZhciBnZXRUaGVtZSA9IGZ1bmN0aW9uIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKSB7XG4gIGlmICh0eXBlb2YgdGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgbWVyZ2VkVGhlbWUgPSB0aGVtZShvdXRlclRoZW1lKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChtZXJnZWRUaGVtZSA9PSBudWxsIHx8IHR5cGVvZiBtZXJnZWRUaGVtZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShtZXJnZWRUaGVtZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHlvdXIgdGhlbWUgZnVuY3Rpb24sIGkuZS4gdGhlbWU9eygpID0+ICh7fSl9IScpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICh0aGVtZSA9PSBudWxsIHx8IHR5cGVvZiB0aGVtZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh0aGVtZSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbVGhlbWVQcm92aWRlcl0gUGxlYXNlIG1ha2UgeW91ciB0aGVtZSBwcm9wIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHRoZW1lKTtcbn07XG5cbnZhciBjcmVhdGVDYWNoZVdpdGhUaGVtZSA9IC8qICNfX1BVUkVfXyAqL3dlYWtNZW1vaXplKGZ1bmN0aW9uIChvdXRlclRoZW1lKSB7XG4gIHJldHVybiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAodGhlbWUpIHtcbiAgICByZXR1cm4gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpO1xuICB9KTtcbn0pO1xudmFyIFRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcblxuICBpZiAocHJvcHMudGhlbWUgIT09IHRoZW1lKSB7XG4gICAgdGhlbWUgPSBjcmVhdGVDYWNoZVdpdGhUaGVtZSh0aGVtZSkocHJvcHMudGhlbWUpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZVxuICB9LCBwcm9wcy5jaGlsZHJlbik7XG59O1xuZnVuY3Rpb24gd2l0aFRoZW1lKENvbXBvbmVudCkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICB2YXIgV2l0aFRoZW1lID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYocmVuZGVyKTtcbiAgV2l0aFRoZW1lLmRpc3BsYXlOYW1lID0gXCJXaXRoVGhlbWUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCI7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoVGhlbWUsIENvbXBvbmVudCk7XG59XG5cbnZhciBnZXRMYXN0UGFydCA9IGZ1bmN0aW9uIGdldExhc3RQYXJ0KGZ1bmN0aW9uTmFtZSkge1xuICAvLyBUaGUgbWF0Y2ggbWF5IGJlIHNvbWV0aGluZyBsaWtlICdPYmplY3QuY3JlYXRlRW1vdGlvblByb3BzJyBvclxuICAvLyAnTG9hZGVyLnByb3RvdHlwZS5yZW5kZXInXG4gIHZhciBwYXJ0cyA9IGZ1bmN0aW9uTmFtZS5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG59O1xuXG52YXIgZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lID0gZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmUpIHtcbiAgLy8gVjhcbiAgdmFyIG1hdGNoID0gL15cXHMrYXRcXHMrKFtBLVphLXowLTkkLl0rKVxccy8uZXhlYyhsaW5lKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZ2V0TGFzdFBhcnQobWF0Y2hbMV0pOyAvLyBTYWZhcmkgLyBGaXJlZm94XG5cbiAgbWF0Y2ggPSAvXihbQS1aYS16MC05JC5dKylALy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMgPSAvKiAjX19QVVJFX18gKi9uZXcgU2V0KFsncmVuZGVyV2l0aEhvb2tzJywgJ3Byb2Nlc3NDaGlsZCcsICdmaW5pc2hDbGFzc0NvbXBvbmVudCcsICdyZW5kZXJUb1N0cmluZyddKTsgLy8gVGhlc2UgaWRlbnRpZmllcnMgY29tZSBmcm9tIGVycm9yIHN0YWNrcywgc28gdGhleSBoYXZlIHRvIGJlIHZhbGlkIEpTXG4vLyBpZGVudGlmaWVycywgdGh1cyB3ZSBvbmx5IG5lZWQgdG8gcmVwbGFjZSB3aGF0IGlzIGEgdmFsaWQgY2hhcmFjdGVyIGZvciBKUyxcbi8vIGJ1dCBub3QgZm9yIENTUy5cblxudmFyIHNhbml0aXplSWRlbnRpZmllciA9IGZ1bmN0aW9uIHNhbml0aXplSWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHJldHVybiBpZGVudGlmaWVyLnJlcGxhY2UoL1xcJC9nLCAnLScpO1xufTtcblxudmFyIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgPSBmdW5jdGlvbiBnZXRMYWJlbEZyb21TdGFja1RyYWNlKHN0YWNrVHJhY2UpIHtcbiAgaWYgKCFzdGFja1RyYWNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICB2YXIgbGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZShsaW5lc1tpXSk7IC8vIFRoZSBmaXJzdCBsaW5lIG9mIFY4IHN0YWNrIHRyYWNlcyBpcyBqdXN0IFwiRXJyb3JcIlxuXG4gICAgaWYgKCFmdW5jdGlvbk5hbWUpIGNvbnRpbnVlOyAvLyBJZiB3ZSByZWFjaCBvbmUgb2YgdGhlc2UsIHdlIGhhdmUgZ29uZSB0b28gZmFyIGFuZCBzaG91bGQgcXVpdFxuXG4gICAgaWYgKGludGVybmFsUmVhY3RGdW5jdGlvbk5hbWVzLmhhcyhmdW5jdGlvbk5hbWUpKSBicmVhazsgLy8gVGhlIGNvbXBvbmVudCBuYW1lIGlzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgc3RhY2sgdGhhdCBzdGFydHMgd2l0aCBhblxuICAgIC8vIHVwcGVyY2FzZSBsZXR0ZXJcblxuICAgIGlmICgvXltBLVpdLy50ZXN0KGZ1bmN0aW9uTmFtZSkpIHJldHVybiBzYW5pdGl6ZUlkZW50aWZpZXIoZnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUpIHtcbiAgY3JlYXRlKCk7XG59O1xuZnVuY3Rpb24gdXNlSW5zZXJ0aW9uRWZmZWN0TWF5YmUoY3JlYXRlKSB7XG5cbiAgdXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSk7XG59XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gRm9yIHBlcmZvcm1hbmNlLCBvbmx5IGNhbGwgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSBpbiBkZXZlbG9wbWVudCBhbmQgd2hlblxuICAvLyB0aGUgbGFiZWwgaGFzbid0IGFscmVhZHkgYmVlbiBjb21wdXRlZFxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEhcHJvcHMuY3NzICYmICh0eXBlb2YgcHJvcHMuY3NzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcHJvcHMuY3NzLm5hbWUgIT09ICdzdHJpbmcnIHx8IHByb3BzLmNzcy5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpKSB7XG4gICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgaWYgKGxhYmVsKSBuZXdQcm9wc1tsYWJlbFByb3BOYW1lXSA9IGxhYmVsO1xuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgcnVsZXMgPSB1c2VJbnNlcnRpb25FZmZlY3RNYXliZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgdXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSAmJiBrZXkgIT09ICdjc3MnICYmIGtleSAhPT0gdHlwZVByb3BOYW1lICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIHx8IGtleSAhPT0gbGFiZWxQcm9wTmFtZSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgfSksIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIG5ld1Byb3BzKSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbi5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ3NzUHJvcEludGVybmFsJztcbn1cblxuZXhwb3J0IHsgQ2FjaGVQcm92aWRlciBhcyBDLCBFbW90aW9uIGFzIEUsIFRoZW1lQ29udGV4dCBhcyBULCBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgYXMgXywgdXNlVGhlbWUgYXMgYSwgVGhlbWVQcm92aWRlciBhcyBiLCBjcmVhdGVFbW90aW9uUHJvcHMgYXMgYywgd2l0aFRoZW1lIGFzIGQsIGhhc093blByb3BlcnR5IGFzIGgsIHVzZUluc2VydGlvbkVmZmVjdE1heWJlIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG11cm11cjI7XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pdGxlc3NLZXlzO1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKHZhcnxhdHRyfGNvdW50ZXJzP3x1cmx8KCgocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWwpKXxjb25pYyktZ3JhZGllbnQpXFwofChuby0pPyhvcGVufGNsb3NlKS1xdW90ZS87XG4gIHZhciBjb250ZW50VmFsdWVzID0gWydub3JtYWwnLCAnbm9uZScsICdpbml0aWFsJywgJ2luaGVyaXQnLCAndW5zZXQnXTtcbiAgdmFyIG9sZFByb2Nlc3NTdHlsZVZhbHVlID0gcHJvY2Vzc1N0eWxlVmFsdWU7XG4gIHZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG4gIHZhciBoeXBoZW5hdGVkQ2FjaGUgPSB7fTtcblxuICBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnY29udGVudCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IGNvbnRlbnRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmICFjb250ZW50VmFsdWVQYXR0ZXJuLnRlc3QodmFsdWUpICYmICh2YWx1ZS5jaGFyQXQoMCkgIT09IHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSB8fCB2YWx1ZS5jaGFyQXQoMCkgIT09ICdcIicgJiYgdmFsdWUuY2hhckF0KDApICE9PSBcIidcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IHNlZW0gdG8gYmUgdXNpbmcgYSB2YWx1ZSBmb3IgJ2NvbnRlbnQnIHdpdGhvdXQgcXVvdGVzLCB0cnkgcmVwbGFjaW5nIGl0IHdpdGggYGNvbnRlbnQ6ICdcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIidgXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm9jZXNzZWQgPSBvbGRQcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKTtcblxuICAgIGlmIChwcm9jZXNzZWQgIT09ICcnICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYga2V5LmluZGV4T2YoJy0nKSAhPT0gLTEgJiYgaHlwaGVuYXRlZENhY2hlW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaHlwaGVuYXRlZENhY2hlW2tleV0gPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihcIlVzaW5nIGtlYmFiLWNhc2UgZm9yIGNzcyBwcm9wZXJ0aWVzIGluIG9iamVjdHMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIFwiICsga2V5LnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoc3RyLCBfY2hhcikge1xuICAgICAgICByZXR1cm4gX2NoYXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pICsgXCI/XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH07XG59XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChpbnRlcnBvbGF0aW9uLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24udG9TdHJpbmcoKSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBpbnRlcnBvbGF0aW9uLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGludGVycG9sYXRpb24uc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGlvbi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGludGVycG9sYXRpb24ubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBpbnRlcnBvbGF0aW9uLnN0eWxlcyArIFwiO1wiO1xuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3R5bGVzICs9IGludGVycG9sYXRpb24ubWFwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRnVuY3Rpb25zIHRoYXQgYXJlIGludGVycG9sYXRlZCBpbiBjc3MgY2FsbHMgd2lsbCBiZSBzdHJpbmdpZmllZC5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIGhhdmUgYSBjc3MgY2FsbCBiYXNlZCBvbiBwcm9wcywgY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3NzIGNhbGwgbGlrZSB0aGlzXFxuJyArICdsZXQgZHluYW1pY1N0eWxlID0gKHByb3BzKSA9PiBjc3NgY29sb3I6ICR7cHJvcHMuY29sb3J9YFxcbicgKyAnSXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSB3aXRoIHByb3BzIG9yIGludGVycG9sYXRlZCBpbiBhIHN0eWxlZCBjYWxsIGxpa2UgdGhpc1xcbicgKyBcImxldCBTb21lQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKWAke2R5bmFtaWNTdHlsZX1gXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VkID0gaW50ZXJwb2xhdGlvbi5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgIHZhciBmYWtlVmFyTmFtZSA9IFwiYW5pbWF0aW9uXCIgKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgICBtYXRjaGVkLnB1c2goXCJjb25zdCBcIiArIGZha2VWYXJOYW1lICsgXCIgPSBrZXlmcmFtZXNgXCIgKyBwMi5yZXBsYWNlKC9eQGtleWZyYW1lcyBhbmltYXRpb24tXFx3Ky8sICcnKSArIFwiYFwiKTtcbiAgICAgICAgICByZXR1cm4gXCIke1wiICsgZmFrZVZhck5hbWUgKyBcIn1cIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignYGtleWZyYW1lc2Agb3V0cHV0IGdvdCBpbnRlcnBvbGF0ZWQgaW50byBwbGFpbiBzdHJpbmcsIHBsZWFzZSB3cmFwIGl0IHdpdGggYGNzc2AuXFxuXFxuJyArICdJbnN0ZWFkIG9mIGRvaW5nIHRoaXM6XFxuXFxuJyArIFtdLmNvbmNhdChtYXRjaGVkLCBbXCJgXCIgKyByZXBsYWNlZCArIFwiYFwiXSkuam9pbignXFxuJykgKyAnXFxuXFxuWW91IHNob3VsZCB3cmFwIGl0IHdpdGggYGNzc2AgbGlrZSB0aGlzOlxcblxcbicgKyAoXCJjc3NgXCIgKyByZXBsYWNlZCArIFwiYFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbaW50ZXJwb2xhdGlvbl07XG4gIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGludGVycG9sYXRpb247XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW19rZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgcmVnaXN0ZXJlZFt2YWx1ZV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX2tleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKF9rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgX2tleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIn1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbnZhciBsYWJlbFBhdHRlcm4gPSAvbGFiZWw6XFxzKihbXlxccztcXG57XSspXFxzKig7fCQpL2c7XG52YXIgc291cmNlTWFwUGF0dGVybjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgc291cmNlTWFwUGF0dGVybiA9IC9cXC9cXCojXFxzc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjtcXFMrXFxzK1xcKlxcLy9nO1xufSAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxuXG52YXIgY3Vyc29yO1xudmFyIHNlcmlhbGl6ZVN0eWxlcyA9IGZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICB9XG5cbiAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1tpXTtcbiAgICB9XG4gIH1cblxuICB2YXIgc291cmNlTWFwO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3R5bGVzID0gc3R5bGVzLnJlcGxhY2Uoc291cmNlTWFwUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICBzb3VyY2VNYXAgPSBtYXRjaDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyAvLyAkRmxvd0ZpeE1lIHdlIGtub3cgaXQncyBub3QgbnVsbFxuICAgIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWUgU2VyaWFsaXplZFN0eWxlcyB0eXBlIGRvZXNuJ3QgaGF2ZSB0b1N0cmluZyBwcm9wZXJ0eSAoYW5kIHdlIGRvbid0IHdhbnQgdG8gYWRkIGl0KVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICBtYXA6IHNvdXJjZU1hcCxcbiAgICAgIG5leHQ6IGN1cnNvcixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59O1xuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsImltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgcmVhY3RQcm9wc1JlZ2V4ID0gL14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWJicnxhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxlbnRlcktleUhpbnR8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3BWYWxpZDtcbiIsInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgbWF5YmVTdHlsZXMgPSBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBjcmVhdGVFbGVtZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc1Byb3BWYWxpZCBmcm9tICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCB7IHdpdGhFbW90aW9uQ2FjaGUsIFRoZW1lQ29udGV4dCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuXG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gaXNQcm9wVmFsaWQ7XG5cbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZSc7XG59O1xuXG52YXIgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5NiA/IHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA6IHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudDtcbn07XG52YXIgY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpIHtcbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA/IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AocHJvcE5hbWUpICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSk7XG4gICAgfSA6IG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2hvdWxkRm9yd2FyZFByb3AgIT09ICdmdW5jdGlvbicgJiYgaXNSZWFsKSB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZEZvcndhcmRQcm9wO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmdW5jdGlvbiB1c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlKSB7XG4gIGNyZWF0ZSgpO1xufTtcbmZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdE1heWJlKGNyZWF0ZSkge1xuXG4gIHVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUpO1xufVxuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdE1heWJlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNyZWF0ZVN0eWxlZCA9IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIGEgc3R5bGVkIGVsZW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgY29tcG9uZW50LlxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW1wb3J0IGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3R5bGVzID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQgPyB0YWcuX19lbW90aW9uX3N0eWxlcy5zbGljZSgwKSA6IFtdO1xuXG4gICAgaWYgKGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibGFiZWw6XCIgKyBpZGVudGlmaWVyTmFtZSArIFwiO1wiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoLmFwcGx5KHN0eWxlcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1bMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzLnB1c2goYXJnc1swXVswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWU6IHdlIG5lZWQgdG8gY2FzdCBTdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50IHRvIG91ciBQcml2YXRlU3R5bGVkQ29tcG9uZW50IGNsYXNzXG5cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICggLy8gJEZsb3dGaXhNZVxuICAgICAgICBmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9IC8vICRGbG93Rml4TWU6IGNvZXJjZSB1bmRlZmluZWQgdG8gc3RyaW5nXG5cblxuICAgICAgICByZXR1cm4gXCIuXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTdHlsZWQud2l0aENvbXBvbmVudCA9IGZ1bmN0aW9uIChuZXh0VGFnLCBuZXh0T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlZChuZXh0VGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgbmV4dE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMoU3R5bGVkLCBuZXh0T3B0aW9ucywgdHJ1ZSlcbiAgICAgIH0pKS5hcHBseSh2b2lkIDAsIHN0eWxlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBTdHlsZWQ7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdHlsZWQ7XG4iLCJpbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5pbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4uL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5cbnZhciB0YWdzID0gWydhJywgJ2FiYnInLCAnYWRkcmVzcycsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLCAnYicsICdiYXNlJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2l0ZScsICdjb2RlJywgJ2NvbCcsICdjb2xncm91cCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlbCcsICdkZXRhaWxzJywgJ2RmbicsICdkaWFsb2cnLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtJywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpbnMnLCAna2JkJywgJ2tleWdlbicsICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbGluaycsICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ21ldGVyJywgJ25hdicsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ291dHB1dCcsICdwJywgJ3BhcmFtJywgJ3BpY3R1cmUnLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLCAncnAnLCAncnQnLCAncnVieScsICdzJywgJ3NhbXAnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NtYWxsJywgJ3NvdXJjZScsICdzcGFuJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInLCAvLyBTVkdcbidjaXJjbGUnLCAnY2xpcFBhdGgnLCAnZGVmcycsICdlbGxpcHNlJywgJ2ZvcmVpZ25PYmplY3QnLCAnZycsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhckdyYWRpZW50JywgJ21hc2snLCAncGF0aCcsICdwYXR0ZXJuJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsICdzdG9wJywgJ3N2ZycsICd0ZXh0JywgJ3RzcGFuJ107XG5cbnZhciBuZXdTdHlsZWQgPSBjcmVhdGVTdHlsZWQuYmluZCgpO1xudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gIC8vICRGbG93Rml4TWU6IHdlIGNhbiBpZ25vcmUgdGhpcyBiZWNhdXNlIGl0cyBleHBvc2VkIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUgQ3JlYXRlU3R5bGVkIHR5cGVcbiAgbmV3U3R5bGVkW3RhZ05hbWVdID0gbmV3U3R5bGVkKHRhZ05hbWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5ld1N0eWxlZDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpIHtcbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNsb3RzKS5mb3JFYWNoKCAvLyBgT2JqZXQua2V5cyhzbG90cylgIGNhbid0IGJlIHdpZGVyIHRoYW4gYFRgIGJlY2F1c2Ugd2UgaW5mZXIgYFRgIGZyb20gYHNsb3RzYC5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvcHVsbC8xMjI1MyNpc3N1ZWNvbW1lbnQtMjYzMTMyMjA4XG4gIHNsb3QgPT4ge1xuICAgIG91dHB1dFtzbG90XSA9IHNsb3RzW3Nsb3RdLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgJiYgY2xhc3Nlc1trZXldKSB7XG4gICAgICAgICAgYWNjLnB1c2goY2xhc3Nlc1trZXldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjYy5wdXNoKGdldFV0aWxpdHlDbGFzcyhrZXkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSkuam9pbignICcpO1xuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn0iLCJjb25zdCBkZWZhdWx0R2VuZXJhdG9yID0gY29tcG9uZW50TmFtZSA9PiBjb21wb25lbnROYW1lO1xuXG5jb25zdCBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IgPSAoKSA9PiB7XG4gIGxldCBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJlKGdlbmVyYXRvcikge1xuICAgICAgZ2VuZXJhdGUgPSBnZW5lcmF0b3I7XG4gICAgfSxcblxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gICAgfVxuXG4gIH07XG59O1xuXG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCJpbXBvcnQgQ2xhc3NOYW1lR2VuZXJhdG9yIGZyb20gJy4vQ2xhc3NOYW1lR2VuZXJhdG9yJztcbmNvbnN0IGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgPSB7XG4gIGFjdGl2ZTogJ011aS1hY3RpdmUnLFxuICBjaGVja2VkOiAnTXVpLWNoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdNdWktY29tcGxldGVkJyxcbiAgZGlzYWJsZWQ6ICdNdWktZGlzYWJsZWQnLFxuICBlcnJvcjogJ011aS1lcnJvcicsXG4gIGV4cGFuZGVkOiAnTXVpLWV4cGFuZGVkJyxcbiAgZm9jdXNlZDogJ011aS1mb2N1c2VkJyxcbiAgZm9jdXNWaXNpYmxlOiAnTXVpLWZvY3VzVmlzaWJsZScsXG4gIHJlcXVpcmVkOiAnTXVpLXJlcXVpcmVkJyxcbiAgc2VsZWN0ZWQ6ICdNdWktc2VsZWN0ZWQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCkge1xuICBjb25zdCBnbG9iYWxTdGF0ZUNsYXNzID0gZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZ1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgfHwgYCR7Q2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlKGNvbXBvbmVudE5hbWUpfS0ke3Nsb3R9YDtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyhjb21wb25lbnROYW1lLCBzbG90cykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICByZXN1bHRbc2xvdF0gPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwiLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gZWxlbWVudCBpcyBhIERPTSBlbGVtZW50IG5hbWUgKGkuZS4gbm90IGEgUmVhY3QgY29tcG9uZW50KS5cbiAqL1xuZnVuY3Rpb24gaXNIb3N0Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNIb3N0Q29tcG9uZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcblxudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6XCJcbn0pLCAnQWNjb3VudEJhbGFuY2VXYWxsZXQnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExLjggMTAuOWMtMi4yNy0uNTktMy0xLjItMy0yLjE1IDAtMS4wOSAxLjAxLTEuODUgMi43LTEuODUgMS43OCAwIDIuNDQuODUgMi41IDIuMWgyLjIxYy0uMDctMS43Mi0xLjEyLTMuMy0zLjIxLTMuODFWM2gtM3YyLjE2Yy0xLjk0LjQyLTMuNSAxLjY4LTMuNSAzLjYxIDAgMi4zMSAxLjkxIDMuNDYgNC43IDQuMTMgMi41LjYgMyAxLjQ4IDMgMi40MSAwIC42OS0uNDkgMS43OS0yLjcgMS43OS0yLjA2IDAtMi44Ny0uOTItMi45OC0yLjFoLTIuMmMuMTIgMi4xOSAxLjc2IDMuNDIgMy42OCAzLjgzVjIxaDN2LTIuMTVjMS45NS0uMzcgMy41LTEuNSAzLjUtMy41NSAwLTIuODQtMi40My0zLjgxLTQuNy00LjR6XCJcbn0pLCAnQXR0YWNoTW9uZXknKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3LjA2IDExLjU3Yy41OS0uNjkuOTQtMS41OS45NC0yLjU3IDAtMS44Ni0xLjI3LTMuNDMtMy0zLjg3VjNoLTJ2MmgtMlYzSDl2Mkg2djJoMnYxMEg2djJoM3YyaDJ2LTJoMnYyaDJ2LTJjMi4yMSAwIDQtMS43OSA0LTQgMC0xLjQ1LS43OC0yLjczLTEuOTQtMy40M3pNMTAgN2g0YzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMmgtNFY3em01IDEwaC01di00aDVjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyelwiXG59KSwgJ0N1cnJlbmN5Qml0Y29pbicpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIuODkgMTEuMWMtMS43OC0uNTktMi42NC0uOTYtMi42NC0xLjkgMC0xLjAyIDEuMTEtMS4zOSAxLjgxLTEuMzkgMS4zMSAwIDEuNzkuOTkgMS45IDEuMzRsMS41OC0uNjdjLS4xNS0uNDUtLjgyLTEuOTItMi41NC0yLjI0VjVoLTJ2MS4yNmMtMi40OC41Ni0yLjQ5IDIuODYtMi40OSAyLjk2IDAgMi4yNyAyLjI1IDIuOTEgMy4zNSAzLjMxIDEuNTguNTYgMi4yOCAxLjA3IDIuMjggMi4wMyAwIDEuMTMtMS4wNSAxLjYxLTEuOTggMS42MS0xLjgyIDAtMi4zNC0xLjg3LTIuNC0yLjA5bC0xLjY2LjY3Yy42MyAyLjE5IDIuMjggMi43OCAyLjkgMi45NlYxOWgydi0xLjI0Yy40LS4wOSAyLjktLjU5IDIuOS0zLjIyIDAtMS4zOS0uNjEtMi42MS0zLjAxLTMuNDR6TTMgMjFIMXYtNmg2djJINC41MmMxLjYxIDIuNDEgNC4zNiA0IDcuNDggNCA0Ljk3IDAgOS00LjAzIDktOWgyYzAgNi4wOC00LjkyIDExLTExIDExLTMuNzIgMC03LjAxLTEuODUtOS00LjY3VjIxem0tMi05QzEgNS45MiA1LjkyIDEgMTIgMWMzLjcyIDAgNy4wMSAxLjg1IDkgNC42N1YzaDJ2NmgtNlY3aDIuNDhDMTcuODcgNC41OSAxNS4xMiAzIDEyIDNjLTQuOTcgMC05IDQuMDMtOSA5SDF6XCJcbn0pLCAnQ3VycmVuY3lFeGNoYW5nZScpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG5cbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcblxudmFyIF9kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJtMjEuNDEgMTEuNDEtOC44My04LjgzYy0uMzctLjM3LS44OC0uNTgtMS40MS0uNThINGMtMS4xIDAtMiAuOS0yIDJ2Ny4xN2MwIC41My4yMSAxLjA0LjU5IDEuNDFsOC44MyA4LjgzYy43OC43OCAyLjA1Ljc4IDIuODMgMGw3LjE3LTcuMTdjLjc4LS43OC43OC0yLjA0LS4wMS0yLjgzek02LjUgOEM1LjY3IDggNSA3LjMzIDUgNi41UzUuNjcgNSA2LjUgNSA4IDUuNjcgOCA2LjUgNy4zMyA4IDYuNSA4elwiXG59KSwgJ1NlbGwnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwibTE5IDE1LTYgNi0xLjQyLTEuNDJMMTUuMTcgMTZINFY0aDJ2MTBoOS4xN2wtMy41OS0zLjU4TDEzIDlsNiA2elwiXG59KSwgJ1N1YmRpcmVjdG9yeUFycm93UmlnaHQnKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xuXG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIzIDhjMCAxLjEtLjkgMi0yIDItLjE4IDAtLjM1LS4wMi0uNTEtLjA3bC0zLjU2IDMuNTVjLjA1LjE2LjA3LjM0LjA3LjUyIDAgMS4xLS45IDItMiAycy0yLS45LTItMmMwLS4xOC4wMi0uMzYuMDctLjUybC0yLjU1LTIuNTVjLS4xNi4wNS0uMzQuMDctLjUyLjA3cy0uMzYtLjAyLS41Mi0uMDdsLTQuNTUgNC41NmMuMDUuMTYuMDcuMzMuMDcuNTEgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yYy4xOCAwIC4zNS4wMi41MS4wN2w0LjU2LTQuNTVDOC4wMiA5LjM2IDggOS4xOCA4IDljMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIC4xOC0uMDIuMzYtLjA3LjUybDIuNTUgMi41NWMuMTYtLjA1LjM0LS4wNy41Mi0uMDdzLjM2LjAyLjUyLjA3bDMuNTUtMy41NkMxOS4wMiA4LjM1IDE5IDguMTggMTkgOGMwLTEuMS45LTIgMi0yczIgLjkgMiAyelwiXG59KSwgJ1RpbWVsaW5lJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbHMuY3JlYXRlU3ZnSWNvbjtcbiAgfVxufSk7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbC91dGlsc1wiKTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxlcnRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUFsZXJ0Jywgc2xvdCk7XG59XG5jb25zdCBhbGVydENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlBbGVydCcsIFsncm9vdCcsICdhY3Rpb24nLCAnaWNvbicsICdtZXNzYWdlJywgJ2ZpbGxlZCcsICdmaWxsZWRTdWNjZXNzJywgJ2ZpbGxlZEluZm8nLCAnZmlsbGVkV2FybmluZycsICdmaWxsZWRFcnJvcicsICdvdXRsaW5lZCcsICdvdXRsaW5lZFN1Y2Nlc3MnLCAnb3V0bGluZWRJbmZvJywgJ291dGxpbmVkV2FybmluZycsICdvdXRsaW5lZEVycm9yJywgJ3N0YW5kYXJkJywgJ3N0YW5kYXJkU3VjY2VzcycsICdzdGFuZGFyZEluZm8nLCAnc3RhbmRhcmRXYXJuaW5nJywgJ3N0YW5kYXJkRXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBhbGVydENsYXNzZXM7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEljb25CdXR0b25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUljb25CdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGljb25CdXR0b25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSWNvbkJ1dHRvbicsIFsncm9vdCcsICdkaXNhYmxlZCcsICdjb2xvckluaGVyaXQnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJywgJ3NpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGljb25CdXR0b25DbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJlZGdlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwic2l6ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGljb25CdXR0b25DbGFzc2VzLCB7IGdldEljb25CdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ljb25CdXR0b25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVkLFxuICAgIGNvbG9yLFxuICAgIGVkZ2UsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgY29sb3IgIT09ICdkZWZhdWx0JyAmJiBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGVkZ2UgJiYgYGVkZ2Uke2NhcGl0YWxpemUoZWRnZSl9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJY29uQnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IEljb25CdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgbmFtZTogJ011aUljb25CdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZWRnZSAmJiBzdHlsZXNbYGVkZ2Uke2NhcGl0YWxpemUob3duZXJTdGF0ZS5lZGdlKX1gXSwgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDI0KSxcbiAgcGFkZGluZzogOCxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgLy8gRXhwbGljaXRseSBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgdG8gc29sdmUgYSBidWcgb24gSUUxMS5cbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogYWxwaGEodGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdzdGFydCcgJiYge1xuICBtYXJnaW5MZWZ0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSwgb3duZXJTdGF0ZS5lZGdlID09PSAnZW5kJyAmJiB7XG4gIG1hcmdpblJpZ2h0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0sICFvd25lclN0YXRlLmRpc2FibGVSaXBwbGUgJiYge1xuICAnJjpob3Zlcic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSksIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmc6IDUsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTgpXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYge1xuICBwYWRkaW5nOiAxMixcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgyOClcbn0sIHtcbiAgW2AmLiR7aWNvbkJ1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0pKTtcbi8qKlxuICogUmVmZXIgdG8gdGhlIFtJY29uc10oL2NvbXBvbmVudHMvaWNvbnMvKSBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uXG4gKiByZWdhcmRpbmcgdGhlIGF2YWlsYWJsZSBpY29uIG9wdGlvbnMuXG4gKi9cblxuY29uc3QgSWNvbkJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEljb25CdXR0b24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUljb25CdXR0b24nXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBlZGdlID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gJ2RlZmF1bHQnLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgc2l6ZSA9ICdtZWRpdW0nXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZWRnZSxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgc2l6ZVxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJY29uQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2VudGVyUmlwcGxlOiB0cnVlLFxuICAgIGZvY3VzUmlwcGxlOiAhZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSWNvbkJ1dHRvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheS5cbiAgICovXG4gIGNoaWxkcmVuOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMubm9kZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGZvdW5kID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbikuc29tZShjaGlsZCA9PiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIGNoaWxkLnByb3BzLm9uQ2xpY2spO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhbiBvbkNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIGEgY2hpbGQgb2YgYSBidXR0b24gZWxlbWVudC4nLCAnUHJlZmVyIGFwcGx5aW5nIGl0IHRvIHRoZSBJY29uQnV0dG9uIGRpcmVjdGx5LicsICdUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgd2hvbGUgPGJ1dHRvbj4gd2lsbCBiZSByZXNwb25zaXZlIHRvIGNsaWNrIGV2ZW50cy4nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LiBJdCBzdXBwb3J0cyB0aG9zZSB0aGVtZSBjb2xvcnMgdGhhdCBtYWtlIHNlbnNlIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGdpdmVuLCB1c2VzIGEgbmVnYXRpdmUgbWFyZ2luIHRvIGNvdW50ZXJhY3QgdGhlIHBhZGRpbmcgb24gb25lXG4gICAqIHNpZGUgKHRoaXMgaXMgb2Z0ZW4gaGVscGZ1bCBmb3IgYWxpZ25pbmcgdGhlIGxlZnQgb3IgcmlnaHRcbiAgICogc2lkZSBvZiB0aGUgaWNvbiB3aXRoIGNvbnRlbnQgYWJvdmUgb3IgYmVsb3csIHdpdGhvdXQgcnVpbmluZyB0aGUgYm9yZGVyXG4gICAqIHNpemUgYW5kIHNoYXBlKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVkZ2U6IFByb3BUeXBlcy5vbmVPZihbJ2VuZCcsICdzdGFydCcsIGZhbHNlXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0yMCwxMkE4LDggMCAwLDEgMTIsMjBBOCw4IDAgMCwxIDQsMTJBOCw4IDAgMCwxIDEyLDRDMTIuNzYsNCAxMy41LDQuMTEgMTQuMiwgNC4zMUwxNS43NywyLjc0QzE0LjYxLDIuMjYgMTMuMzQsMiAxMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLCAwIDIyLDEyTTcuOTEsMTAuMDhMNi41LDExLjVMMTEsMTZMMjEsNkwxOS41OSw0LjU4TDExLDEzLjE3TDcuOTEsMTAuMDhaXCJcbn0pLCAnU3VjY2Vzc091dGxpbmVkJyk7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDUuOTlMMTkuNTMgMTlINC40N0wxMiA1Ljk5TTEyIDJMMSAyMWgyMkwxMiAyem0xIDE0aC0ydjJoMnYtMnptMC02aC0ydjRoMnYtNHpcIlxufSksICdSZXBvcnRQcm9ibGVtT3V0bGluZWQnKTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4elwiXG59KSwgJ0Vycm9yT3V0bGluZScpOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xMSw5SDEzVjdIMTFNMTIsMjBDNy41OSwyMCA0LDE2LjQxIDQsMTJDNCw3LjU5IDcuNTksNCAxMiw0QzE2LjQxLDQgMjAsNy41OSAyMCwgMTJDMjAsMTYuNDEgMTYuNDEsMjAgMTIsMjBNMTIsMkExMCwxMCAwIDAsMCAyLDEyQTEwLDEwIDAgMCwwIDEyLDIyQTEwLDEwIDAgMCwwIDIyLDEyQTEwLCAxMCAwIDAsMCAxMiwyTTExLDE3SDEzVjExSDExVjE3WlwiXG59KSwgJ0luZm9PdXRsaW5lZCcpOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICpcbiAqIEFsaWFzIHRvIGBDbGVhcmAuXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIlxufSksICdDbG9zZScpOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5cbnZhciBfQ2xvc2VJY29uO1xuXG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlVGV4dFwiLCBcImNvbG9yXCIsIFwiaWNvblwiLCBcImljb25NYXBwaW5nXCIsIFwib25DbG9zZVwiLCBcInJvbGVcIiwgXCJzZXZlcml0eVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBkYXJrZW4sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgUGFwZXIgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IGFsZXJ0Q2xhc3NlcywgeyBnZXRBbGVydFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYWxlcnRDbGFzc2VzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJy4uL0ljb25CdXR0b24nO1xuaW1wb3J0IFN1Y2Nlc3NPdXRsaW5lZEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL1N1Y2Nlc3NPdXRsaW5lZCc7XG5pbXBvcnQgUmVwb3J0UHJvYmxlbU91dGxpbmVkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmVwb3J0UHJvYmxlbU91dGxpbmVkJztcbmltcG9ydCBFcnJvck91dGxpbmVJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9FcnJvck91dGxpbmUnO1xuaW1wb3J0IEluZm9PdXRsaW5lZEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0luZm9PdXRsaW5lZCc7XG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9DbG9zZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBzZXZlcml0eSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgJHt2YXJpYW50fSR7Y2FwaXRhbGl6ZShjb2xvciB8fCBzZXZlcml0eSl9YCwgYCR7dmFyaWFudH1gXSxcbiAgICBpY29uOiBbJ2ljb24nXSxcbiAgICBtZXNzYWdlOiBbJ21lc3NhZ2UnXSxcbiAgICBhY3Rpb246IFsnYWN0aW9uJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRBbGVydFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBBbGVydFJvb3QgPSBzdHlsZWQoUGFwZXIsIHtcbiAgbmFtZTogJ011aUFsZXJ0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yIHx8IG93bmVyU3RhdGUuc2V2ZXJpdHkpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgZ2V0Q29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBkYXJrZW4gOiBsaWdodGVuO1xuICBjb25zdCBnZXRCYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBsaWdodGVuIDogZGFya2VuO1xuICBjb25zdCBjb2xvciA9IG93bmVyU3RhdGUuY29sb3IgfHwgb3duZXJTdGF0ZS5zZXZlcml0eTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkyLCB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnNnB4IDE2cHgnXG4gIH0sIGNvbG9yICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3N0YW5kYXJkJyAmJiB7XG4gICAgY29sb3I6IGdldENvbG9yKHRoZW1lLnBhbGV0dGVbY29sb3JdLmxpZ2h0LCAwLjYpLFxuICAgIGJhY2tncm91bmRDb2xvcjogZ2V0QmFja2dyb3VuZENvbG9yKHRoZW1lLnBhbGV0dGVbY29sb3JdLmxpZ2h0LCAwLjkpLFxuICAgIFtgJiAuJHthbGVydENsYXNzZXMuaWNvbn1gXToge1xuICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnID8gdGhlbWUucGFsZXR0ZVtjb2xvcl0ubWFpbiA6IHRoZW1lLnBhbGV0dGVbY29sb3JdLmxpZ2h0XG4gICAgfVxuICB9LCBjb2xvciAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGNvbG9yOiBnZXRDb2xvcih0aGVtZS5wYWxldHRlW2NvbG9yXS5saWdodCwgMC42KSxcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGVtZS5wYWxldHRlW2NvbG9yXS5saWdodH1gLFxuICAgIFtgJiAuJHthbGVydENsYXNzZXMuaWNvbn1gXToge1xuICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnID8gdGhlbWUucGFsZXR0ZVtjb2xvcl0ubWFpbiA6IHRoZW1lLnBhbGV0dGVbY29sb3JdLmxpZ2h0XG4gICAgfVxuICB9LCBjb2xvciAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodE1lZGl1bSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnID8gdGhlbWUucGFsZXR0ZVtjb2xvcl0uZGFyayA6IHRoZW1lLnBhbGV0dGVbY29sb3JdLm1haW5cbiAgfSk7XG59KTtcbmNvbnN0IEFsZXJ0SWNvbiA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQWxlcnQnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmljb25cbn0pKHtcbiAgbWFyZ2luUmlnaHQ6IDEyLFxuICBwYWRkaW5nOiAnN3B4IDAnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZvbnRTaXplOiAyMixcbiAgb3BhY2l0eTogMC45XG59KTtcbmNvbnN0IEFsZXJ0TWVzc2FnZSA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQWxlcnQnLFxuICBzbG90OiAnTWVzc2FnZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm1lc3NhZ2Vcbn0pKHtcbiAgcGFkZGluZzogJzhweCAwJ1xufSk7XG5jb25zdCBBbGVydEFjdGlvbiA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQWxlcnQnLFxuICBzbG90OiAnQWN0aW9uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYWN0aW9uXG59KSh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuICBwYWRkaW5nOiAnNHB4IDAgMCAxNnB4JyxcbiAgbWFyZ2luTGVmdDogJ2F1dG8nLFxuICBtYXJnaW5SaWdodDogLThcbn0pO1xuY29uc3QgZGVmYXVsdEljb25NYXBwaW5nID0ge1xuICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovX2pzeChTdWNjZXNzT3V0bGluZWRJY29uLCB7XG4gICAgZm9udFNpemU6IFwiaW5oZXJpdFwiXG4gIH0pLFxuICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovX2pzeChSZXBvcnRQcm9ibGVtT3V0bGluZWRJY29uLCB7XG4gICAgZm9udFNpemU6IFwiaW5oZXJpdFwiXG4gIH0pLFxuICBlcnJvcjogLyojX19QVVJFX18qL19qc3goRXJyb3JPdXRsaW5lSWNvbiwge1xuICAgIGZvbnRTaXplOiBcImluaGVyaXRcIlxuICB9KSxcbiAgaW5mbzogLyojX19QVVJFX18qL19qc3goSW5mb091dGxpbmVkSWNvbiwge1xuICAgIGZvbnRTaXplOiBcImluaGVyaXRcIlxuICB9KVxufTtcbmNvbnN0IEFsZXJ0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQWxlcnQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUFsZXJ0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYWN0aW9uLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjbG9zZVRleHQgPSAnQ2xvc2UnLFxuICAgIGNvbG9yLFxuICAgIGljb24sXG4gICAgaWNvbk1hcHBpbmcgPSBkZWZhdWx0SWNvbk1hcHBpbmcsXG4gICAgb25DbG9zZSxcbiAgICByb2xlID0gJ2FsZXJ0JyxcbiAgICBzZXZlcml0eSA9ICdzdWNjZXNzJyxcbiAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIHNldmVyaXR5LFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEFsZXJ0Um9vdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IHJvbGUsXG4gICAgc3F1YXJlOiB0cnVlLFxuICAgIGVsZXZhdGlvbjogMCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2ljb24gIT09IGZhbHNlID8gLyojX19QVVJFX18qL19qc3goQWxlcnRJY29uLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBjaGlsZHJlbjogaWNvbiB8fCBpY29uTWFwcGluZ1tzZXZlcml0eV0gfHwgZGVmYXVsdEljb25NYXBwaW5nW3NldmVyaXR5XVxuICAgIH0pIDogbnVsbCwgLyojX19QVVJFX18qL19qc3goQWxlcnRNZXNzYWdlLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm1lc3NhZ2UsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSwgYWN0aW9uICE9IG51bGwgPyAvKiNfX1BVUkVfXyovX2pzeChBbGVydEFjdGlvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmFjdGlvbixcbiAgICAgIGNoaWxkcmVuOiBhY3Rpb25cbiAgICB9KSA6IG51bGwsIGFjdGlvbiA9PSBudWxsICYmIG9uQ2xvc2UgPyAvKiNfX1BVUkVfXyovX2pzeChBbGVydEFjdGlvbiwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hY3Rpb24sXG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSWNvbkJ1dHRvbiwge1xuICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBjbG9zZVRleHQsXG4gICAgICAgIHRpdGxlOiBjbG9zZVRleHQsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIixcbiAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgY2hpbGRyZW46IF9DbG9zZUljb24gfHwgKF9DbG9zZUljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDbG9zZUljb24sIHtcbiAgICAgICAgICBmb250U2l6ZTogXCJzbWFsbFwiXG4gICAgICAgIH0pKVxuICAgICAgfSlcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQWxlcnQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdG8gZGlzcGxheS4gSXQgcmVuZGVycyBhZnRlciB0aGUgbWVzc2FnZSwgYXQgdGhlIGVuZCBvZiB0aGUgYWxlcnQuXG4gICAqL1xuICBhY3Rpb246IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGxhYmVsIGZvciB0aGUgKmNsb3NlIHBvcHVwKiBpY29uIGJ1dHRvbi5cbiAgICpcbiAgICogRm9yIGxvY2FsaXphdGlvbiBwdXJwb3NlcywgeW91IGNhbiB1c2UgdGhlIHByb3ZpZGVkIFt0cmFuc2xhdGlvbnNdKC9ndWlkZXMvbG9jYWxpemF0aW9uLykuXG4gICAqIEBkZWZhdWx0ICdDbG9zZSdcbiAgICovXG4gIGNsb3NlVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIG1haW4gY29sb3IgZm9yIHRoZSBhbGVydC4gVW5sZXNzIHByb3ZpZGVkLCB0aGUgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgYHNldmVyaXR5YCBwcm9wLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBpY29uIGRpc3BsYXllZCBiZWZvcmUgdGhlIGNoaWxkcmVuLlxuICAgKiBVbmxlc3MgcHJvdmlkZWQsIHRoZSBpY29uIGlzIG1hcHBlZCB0byB0aGUgdmFsdWUgb2YgdGhlIGBzZXZlcml0eWAgcHJvcC5cbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gcmVtb3ZlIHRoZSBgaWNvbmAuXG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSBgc2V2ZXJpdHlgIHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgaWNvbnMsXG4gICAqIGZvciBpbnN0YW5jZSBzdWNjZXNzIHRvIGA8U3VjY2Vzc091dGxpbmVkPmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGlzIG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBpY29uYCBwcm9wIHRvIG92ZXJyaWRlIHRoZSBpY29uIGRpc3BsYXllZC5cbiAgICovXG4gIGljb25NYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVycm9yOiBQcm9wVHlwZXMubm9kZSxcbiAgICBpbmZvOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzdWNjZXNzOiBQcm9wVHlwZXMubm9kZSxcbiAgICB3YXJuaW5nOiBQcm9wVHlwZXMubm9kZVxuICB9KSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogV2hlbiBwcm92aWRlZCBhbmQgbm8gYGFjdGlvbmAgcHJvcCBpcyBzZXQsIGEgY2xvc2UgaWNvbiBidXR0b24gaXMgZGlzcGxheWVkIHRoYXQgdHJpZ2dlcnMgdGhlIGNhbGxiYWNrIHdoZW4gY2xpY2tlZC5cbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogVGhlIEFSSUEgcm9sZSBhdHRyaWJ1dGUgb2YgdGhlIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdhbGVydCdcbiAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXZlcml0eSBvZiB0aGUgYWxlcnQuIFRoaXMgZGVmaW5lcyB0aGUgY29sb3IgYW5kIGljb24gdXNlZC5cbiAgICogQGRlZmF1bHQgJ3N1Y2Nlc3MnXG4gICAqL1xuICBzZXZlcml0eTogUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDEyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00LTQgMS43OS00IDQgMS43OSA0IDQgNHptMCAyYy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00elwiXG59KSwgJ1BlcnNvbicpOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmF0YXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUF2YXRhcicsIHNsb3QpO1xufVxuY29uc3QgYXZhdGFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUF2YXRhcicsIFsncm9vdCcsICdjb2xvckRlZmF1bHQnLCAnY2lyY3VsYXInLCAncm91bmRlZCcsICdzcXVhcmUnLCAnaW1nJywgJ2ZhbGxiYWNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgYXZhdGFyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWx0XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJpbWdQcm9wc1wiLCBcInNpemVzXCIsIFwic3JjXCIsIFwic3JjU2V0XCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgUGVyc29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9QZXJzb24nO1xuaW1wb3J0IHsgZ2V0QXZhdGFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9hdmF0YXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgY29sb3JEZWZhdWx0XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBjb2xvckRlZmF1bHQgJiYgJ2NvbG9yRGVmYXVsdCddLFxuICAgIGltZzogWydpbWcnXSxcbiAgICBmYWxsYmFjazogWydmYWxsYmFjayddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QXZhdGFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IEF2YXRhclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUF2YXRhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5jb2xvckRlZmF1bHQgJiYgc3R5bGVzLmNvbG9yRGVmYXVsdF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGZsZXhTaHJpbms6IDAsXG4gIHdpZHRoOiA0MCxcbiAgaGVpZ2h0OiA0MCxcbiAgZm9udEZhbWlseTogdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDIwKSxcbiAgbGluZUhlaWdodDogMSxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB1c2VyU2VsZWN0OiAnbm9uZSdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3JvdW5kZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXNcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3NxdWFyZScgJiYge1xuICBib3JkZXJSYWRpdXM6IDBcbn0sIG93bmVyU3RhdGUuY29sb3JEZWZhdWx0ICYmIHtcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZC5kZWZhdWx0LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdIDogdGhlbWUucGFsZXR0ZS5ncmV5WzYwMF1cbn0pKTtcbmNvbnN0IEF2YXRhckltZyA9IHN0eWxlZCgnaW1nJywge1xuICBuYW1lOiAnTXVpQXZhdGFyJyxcbiAgc2xvdDogJ0ltZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmltZ1xufSkoe1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgLy8gSGFuZGxlIG5vbi1zcXVhcmUgaW1hZ2UuIFRoZSBwcm9wZXJ0eSBpc24ndCBzdXBwb3J0ZWQgYnkgSUUxMS5cbiAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAvLyBIaWRlIGFsdCB0ZXh0LlxuICBjb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gSGlkZSB0aGUgaW1hZ2UgYnJva2VuIGljb24sIG9ubHkgd29ya3Mgb24gQ2hyb21lLlxuICB0ZXh0SW5kZW50OiAxMDAwMFxufSk7XG5jb25zdCBBdmF0YXJGYWxsYmFjayA9IHN0eWxlZChQZXJzb24sIHtcbiAgbmFtZTogJ011aUF2YXRhcicsXG4gIHNsb3Q6ICdGYWxsYmFjaycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmZhbGxiYWNrXG59KSh7XG4gIHdpZHRoOiAnNzUlJyxcbiAgaGVpZ2h0OiAnNzUlJ1xufSk7XG5cbmZ1bmN0aW9uIHVzZUxvYWRlZCh7XG4gIGNyb3NzT3JpZ2luLFxuICByZWZlcnJlclBvbGljeSxcbiAgc3JjLFxuICBzcmNTZXRcbn0pIHtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNyYyAmJiAhc3JjU2V0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNldExvYWRlZChmYWxzZSk7XG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGVkKCdsb2FkZWQnKTtcbiAgICB9O1xuXG4gICAgaW1hZ2Uub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGVkKCdlcnJvcicpO1xuICAgIH07XG5cbiAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xuICAgIGltYWdlLnJlZmVycmVyUG9saWN5ID0gcmVmZXJyZXJQb2xpY3k7XG4gICAgaW1hZ2Uuc3JjID0gc3JjO1xuXG4gICAgaWYgKHNyY1NldCkge1xuICAgICAgaW1hZ2Uuc3Jjc2V0ID0gc3JjU2V0O1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbY3Jvc3NPcmlnaW4sIHJlZmVycmVyUG9saWN5LCBzcmMsIHNyY1NldF0pO1xuICByZXR1cm4gbG9hZGVkO1xufVxuXG5jb25zdCBBdmF0YXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBBdmF0YXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUF2YXRhcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFsdCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBpbWdQcm9wcyxcbiAgICBzaXplcyxcbiAgICBzcmMsXG4gICAgc3JjU2V0LFxuICAgIHZhcmlhbnQgPSAnY2lyY3VsYXInXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBsZXQgY2hpbGRyZW4gPSBudWxsOyAvLyBVc2UgYSBob29rIGluc3RlYWQgb2Ygb25FcnJvciBvbiB0aGUgaW1nIGVsZW1lbnQgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG5cbiAgY29uc3QgbG9hZGVkID0gdXNlTG9hZGVkKF9leHRlbmRzKHt9LCBpbWdQcm9wcywge1xuICAgIHNyYyxcbiAgICBzcmNTZXRcbiAgfSkpO1xuICBjb25zdCBoYXNJbWcgPSBzcmMgfHwgc3JjU2V0O1xuICBjb25zdCBoYXNJbWdOb3RGYWlsaW5nID0gaGFzSW1nICYmIGxvYWRlZCAhPT0gJ2Vycm9yJztcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3JEZWZhdWx0OiAhaGFzSW1nTm90RmFpbGluZyxcbiAgICBjb21wb25lbnQsXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG5cbiAgaWYgKGhhc0ltZ05vdEZhaWxpbmcpIHtcbiAgICBjaGlsZHJlbiA9IC8qI19fUFVSRV9fKi9fanN4KEF2YXRhckltZywgX2V4dGVuZHMoe1xuICAgICAgYWx0OiBhbHQsXG4gICAgICBzcmM6IHNyYyxcbiAgICAgIHNyY1NldDogc3JjU2V0LFxuICAgICAgc2l6ZXM6IHNpemVzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pbWdcbiAgICB9LCBpbWdQcm9wcykpO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuUHJvcCAhPSBudWxsKSB7XG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlblByb3A7XG4gIH0gZWxzZSBpZiAoaGFzSW1nICYmIGFsdCkge1xuICAgIGNoaWxkcmVuID0gYWx0WzBdO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkcmVuID0gLyojX19QVVJFX18qL19qc3goQXZhdGFyRmFsbGJhY2ssIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5mYWxsYmFja1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEF2YXRhclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEF2YXRhci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGBzcmNgIG9yIGBzcmNTZXRgIHRvXG4gICAqIHByb3ZpZGUgYW4gYWx0IGF0dHJpYnV0ZSBmb3IgdGhlIHJlbmRlcmVkIGBpbWdgIGVsZW1lbnQuXG4gICAqL1xuICBhbHQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVuZGVyIGljb24gb3IgdGV4dCBlbGVtZW50cyBpbnNpZGUgdGhlIEF2YXRhciBpZiBgc3JjYCBpcyBub3Qgc2V0LlxuICAgKiBUaGlzIGNhbiBiZSBhbiBlbGVtZW50LCBvciBqdXN0IGEgc3RyaW5nLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW1nYCBlbGVtZW50IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCB0byBkaXNwbGF5IGFuIGltYWdlLlxuICAgKiBJdCBjYW4gYmUgdXNlZCB0byBsaXN0ZW4gZm9yIHRoZSBsb2FkaW5nIGVycm9yIGV2ZW50LlxuICAgKi9cbiAgaW1nUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBgc2l6ZXNgIGF0dHJpYnV0ZSBmb3IgdGhlIGBpbWdgIGVsZW1lbnQuXG4gICAqL1xuICBzaXplczogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGBzcmNgIGF0dHJpYnV0ZSBmb3IgdGhlIGBpbWdgIGVsZW1lbnQuXG4gICAqL1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBgc3JjU2V0YCBhdHRyaWJ1dGUgZm9yIHRoZSBgaW1nYCBlbGVtZW50LlxuICAgKiBVc2UgdGhpcyBhdHRyaWJ1dGUgZm9yIHJlc3BvbnNpdmUgaW1hZ2UgZGlzcGxheS5cbiAgICovXG4gIHNyY1NldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSBzaGFwZSBvZiB0aGUgYXZhdGFyLlxuICAgKiBAZGVmYXVsdCAnY2lyY3VsYXInXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjaXJjdWxhcicsICdyb3VuZGVkJywgJ3NxdWFyZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQXZhdGFyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3R0b21OYXZpZ2F0aW9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCb3R0b21OYXZpZ2F0aW9uJywgc2xvdCk7XG59XG5jb25zdCBib3R0b21OYXZpZ2F0aW9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJvdHRvbU5hdmlnYXRpb24nLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBib3R0b21OYXZpZ2F0aW9uQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJvbkNoYW5nZVwiLCBcInNob3dMYWJlbHNcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0Qm90dG9tTmF2aWdhdGlvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYm90dG9tTmF2aWdhdGlvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Qm90dG9tTmF2aWdhdGlvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBCb3R0b21OYXZpZ2F0aW9uUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQm90dG9tTmF2aWdhdGlvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBoZWlnaHQ6IDU2LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlclxufSkpO1xuY29uc3QgQm90dG9tTmF2aWdhdGlvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJvdHRvbU5hdmlnYXRpb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJvdHRvbU5hdmlnYXRpb24nXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgb25DaGFuZ2UsXG4gICAgc2hvd0xhYmVscyA9IGZhbHNlLFxuICAgIHZhbHVlXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIHNob3dMYWJlbHNcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQm90dG9tTmF2aWdhdGlvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgY2hpbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBCb3R0b21OYXZpZ2F0aW9uIGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlID09PSB1bmRlZmluZWQgPyBjaGlsZEluZGV4IDogY2hpbGQucHJvcHMudmFsdWU7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBzZWxlY3RlZDogY2hpbGRWYWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHNob3dMYWJlbDogY2hpbGQucHJvcHMuc2hvd0xhYmVsICE9PSB1bmRlZmluZWQgPyBjaGlsZC5wcm9wcy5zaG93TGFiZWwgOiBzaG93TGFiZWxzLFxuICAgICAgICB2YWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgb25DaGFuZ2VcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQm90dG9tTmF2aWdhdGlvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suICoqV2FybmluZyoqOiBUaGlzIGlzIGEgZ2VuZXJpYyBldmVudCBub3QgYSBjaGFuZ2UgZXZlbnQuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBXZSBkZWZhdWx0IHRvIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsIGBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uYHMgd2lsbCBzaG93IHRoZWlyIGxhYmVscy5cbiAgICogQnkgZGVmYXVsdCwgb25seSB0aGUgc2VsZWN0ZWQgYEJvdHRvbU5hdmlnYXRpb25BY3Rpb25gIHdpbGwgc2hvdyBpdHMgbGFiZWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzaG93TGFiZWxzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uYC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm90dG9tTmF2aWdhdGlvbjsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm90dG9tTmF2aWdhdGlvbkFjdGlvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQm90dG9tTmF2aWdhdGlvbkFjdGlvbicsIHNsb3QpO1xufVxuY29uc3QgYm90dG9tTmF2aWdhdGlvbkFjdGlvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCb3R0b21OYXZpZ2F0aW9uQWN0aW9uJywgWydyb290JywgJ2ljb25Pbmx5JywgJ3NlbGVjdGVkJywgJ2xhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgYm90dG9tTmF2aWdhdGlvbkFjdGlvbkNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImljb25cIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcInNlbGVjdGVkXCIsIFwic2hvd0xhYmVsXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgdW5zdXBwb3J0ZWRQcm9wIGZyb20gJy4uL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcCc7XG5pbXBvcnQgYm90dG9tTmF2aWdhdGlvbkFjdGlvbkNsYXNzZXMsIHsgZ2V0Qm90dG9tTmF2aWdhdGlvbkFjdGlvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYm90dG9tTmF2aWdhdGlvbkFjdGlvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgc2hvd0xhYmVsLFxuICAgIHNlbGVjdGVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhc2hvd0xhYmVsICYmICFzZWxlY3RlZCAmJiAnaWNvbk9ubHknLCBzZWxlY3RlZCAmJiAnc2VsZWN0ZWQnXSxcbiAgICBsYWJlbDogWydsYWJlbCcsICFzaG93TGFiZWwgJiYgIXNlbGVjdGVkICYmICdpY29uT25seScsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Qm90dG9tTmF2aWdhdGlvbkFjdGlvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIG5hbWU6ICdNdWlCb3R0b21OYXZpZ2F0aW9uQWN0aW9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLnNob3dMYWJlbCAmJiAhb3duZXJTdGF0ZS5zZWxlY3RlZCAmJiBzdHlsZXMuaWNvbk9ubHldO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydjb2xvcicsICdwYWRkaW5nLXRvcCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gIH0pLFxuICBwYWRkaW5nOiAnNnB4IDEycHggOHB4JyxcbiAgbWluV2lkdGg6IDgwLFxuICBtYXhXaWR0aDogMTY4LFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS50ZXh0LnNlY29uZGFyeSxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGZsZXg6ICcxJ1xufSwgIW93bmVyU3RhdGUuc2hvd0xhYmVsICYmICFvd25lclN0YXRlLnNlbGVjdGVkICYmIHtcbiAgcGFkZGluZ1RvcDogMTZcbn0sIHtcbiAgW2AmLiR7Ym90dG9tTmF2aWdhdGlvbkFjdGlvbkNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBwYWRkaW5nVG9wOiA2LFxuICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpblxuICB9XG59KSk7XG5jb25zdCBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uTGFiZWwgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCb3R0b21OYXZpZ2F0aW9uQWN0aW9uJyxcbiAgc2xvdDogJ0xhYmVsJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubGFiZWxcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZvbnRGYW1pbHk6IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMiksXG4gIG9wYWNpdHk6IDEsXG4gIHRyYW5zaXRpb246ICdmb250LXNpemUgMC4ycywgb3BhY2l0eSAwLjJzJyxcbiAgdHJhbnNpdGlvbkRlbGF5OiAnMC4xcydcbn0sICFvd25lclN0YXRlLnNob3dMYWJlbCAmJiAhb3duZXJTdGF0ZS5zZWxlY3RlZCAmJiB7XG4gIG9wYWNpdHk6IDAsXG4gIHRyYW5zaXRpb25EZWxheTogJzBzJ1xufSwge1xuICBbYCYuJHtib3R0b21OYXZpZ2F0aW9uQWN0aW9uQ2xhc3Nlcy5zZWxlY3RlZH1gXToge1xuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTQpXG4gIH1cbn0pKTtcbmNvbnN0IEJvdHRvbU5hdmlnYXRpb25BY3Rpb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCb3R0b21OYXZpZ2F0aW9uQWN0aW9uJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGljb24sXG4gICAgbGFiZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgb25DbGljayxcbiAgICB2YWx1ZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHByb3BzO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAob25DbGljaykge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQm90dG9tTmF2aWdhdGlvbkFjdGlvblJvb3QsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGZvY3VzUmlwcGxlOiB0cnVlLFxuICAgIG9uQ2xpY2s6IGhhbmRsZUNoYW5nZSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtpY29uLCAvKiNfX1BVUkVfXyovX2pzeChCb3R0b21OYXZpZ2F0aW9uQWN0aW9uTGFiZWwsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sYWJlbCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICB9KV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaXNuJ3Qgc3VwcG9ydGVkLlxuICAgKiBVc2UgdGhlIGBjb21wb25lbnRgIHByb3AgaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjaGlsZHJlbiBzdHJ1Y3R1cmUuXG4gICAqL1xuICBjaGlsZHJlbjogdW5zdXBwb3J0ZWRQcm9wLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkuXG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIGxhYmVsIGVsZW1lbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBCb3R0b21OYXZpZ2F0aW9uQWN0aW9uYCB3aWxsIHNob3cgaXRzIGxhYmVsLlxuICAgKiBCeSBkZWZhdWx0LCBvbmx5IHRoZSBzZWxlY3RlZCBgQm90dG9tTmF2aWdhdGlvbkFjdGlvbmBcbiAgICogaW5zaWRlIGBCb3R0b21OYXZpZ2F0aW9uYCB3aWxsIHNob3cgaXRzIGxhYmVsLlxuICAgKlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgQm90dG9tTmF2aWdhdGlvbiBjb21wb25lbnQuXG4gICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIHZhbHVlLiBPdGhlcndpc2UsIHdlIGZhbGxiYWNrIHRvIHRoZSBjaGlsZCBwb3NpdGlvbiBpbmRleC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm90dG9tTmF2aWdhdGlvbkFjdGlvbjsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b24nLCBbJ3Jvb3QnLCAndGV4dCcsICd0ZXh0SW5oZXJpdCcsICd0ZXh0UHJpbWFyeScsICd0ZXh0U2Vjb25kYXJ5JywgJ291dGxpbmVkJywgJ291dGxpbmVkSW5oZXJpdCcsICdvdXRsaW5lZFByaW1hcnknLCAnb3V0bGluZWRTZWNvbmRhcnknLCAnY29udGFpbmVkJywgJ2NvbnRhaW5lZEluaGVyaXQnLCAnY29udGFpbmVkUHJpbWFyeScsICdjb250YWluZWRTZWNvbmRhcnknLCAnZGlzYWJsZUVsZXZhdGlvbicsICdmb2N1c1Zpc2libGUnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ3RleHRTaXplU21hbGwnLCAndGV4dFNpemVNZWRpdW0nLCAndGV4dFNpemVMYXJnZScsICdvdXRsaW5lZFNpemVTbWFsbCcsICdvdXRsaW5lZFNpemVNZWRpdW0nLCAnb3V0bGluZWRTaXplTGFyZ2UnLCAnY29udGFpbmVkU2l6ZVNtYWxsJywgJ2NvbnRhaW5lZFNpemVNZWRpdW0nLCAnY29udGFpbmVkU2l6ZUxhcmdlJywgJ3NpemVNZWRpdW0nLCAnc2l6ZVNtYWxsJywgJ3NpemVMYXJnZScsICdmdWxsV2lkdGgnLCAnc3RhcnRJY29uJywgJ2VuZEljb24nLCAnaWNvblNpemVTbWFsbCcsICdpY29uU2l6ZU1lZGl1bScsICdpY29uU2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnV0dG9uQ2xhc3NlczsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXBDb250ZXh0OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImVuZEljb25cIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJmdWxsV2lkdGhcIiwgXCJzaXplXCIsIFwic3RhcnRJY29uXCIsIFwidHlwZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGJ1dHRvbkNsYXNzZXMsIHsgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25DbGFzc2VzJztcbmltcG9ydCBCdXR0b25Hcm91cENvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlRWxldmF0aW9uLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYCR7dmFyaWFudH0ke2NhcGl0YWxpemUoY29sb3IpfWAsIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGAke3ZhcmlhbnR9U2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb2xvciA9PT0gJ2luaGVyaXQnICYmICdjb2xvckluaGVyaXQnLCBkaXNhYmxlRWxldmF0aW9uICYmICdkaXNhYmxlRWxldmF0aW9uJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXSxcbiAgICBsYWJlbDogWydsYWJlbCddLFxuICAgIHN0YXJ0SWNvbjogWydzdGFydEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF0sXG4gICAgZW5kSWNvbjogWydlbmRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuXG5jb25zdCBjb21tb25JY29uU3R5bGVzID0gb3duZXJTdGF0ZSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAxOFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdtZWRpdW0nICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIyXG4gIH1cbn0pO1xuXG5jb25zdCBCdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fVNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHN0eWxlcy5jb2xvckluaGVyaXQsIG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiBzdHlsZXMuZGlzYWJsZUVsZXZhdGlvbiwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5idXR0b24sIHtcbiAgbWluV2lkdGg6IDY0LFxuICBwYWRkaW5nOiAnNnB4IDE2cHgnLFxuICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnYmFja2dyb3VuZC1jb2xvcicsICdib3gtc2hhZG93JywgJ2JvcmRlci1jb2xvcicsICdjb2xvciddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gIH0pLFxuICAnJjpob3Zlcic6IF9leHRlbmRzKHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgIGJhY2tncm91bmRDb2xvcjogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleS5BMTAwLFxuICAgIGJveFNoYWRvdzogdGhlbWUuc2hhZG93c1s0XSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJveFNoYWRvdzogdGhlbWUuc2hhZG93c1syXSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICB9XG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uZGFyayxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gICAgfVxuICB9KSxcbiAgJyY6YWN0aXZlJzogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIGJveFNoYWRvdzogdGhlbWUuc2hhZG93c1s4XVxuICB9KSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBib3hTaGFkb3c6IHRoZW1lLnNoYWRvd3NbNl1cbiAgfSksXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IF9leHRlbmRzKHtcbiAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ3NlY29uZGFyeScgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkLFxuICAgIGJveFNoYWRvdzogdGhlbWUuc2hhZG93c1swXSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICBwYWRkaW5nOiAnNnB4IDhweCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gIGNvbG9yOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHBhZGRpbmc6ICc1cHggMTVweCcsXG4gIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJ31gXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgYm9yZGVyOiBgMXB4IHNvbGlkICR7YWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCAwLjUpfWBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRDb250cmFzdFRleHQodGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0pLFxuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdLFxuICBib3hTaGFkb3c6IHRoZW1lLnNoYWRvd3NbMl1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxufSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgYm9yZGVyQ29sb3I6ICdjdXJyZW50Q29sb3InXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICBwYWRkaW5nOiAnNHB4IDVweCcsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICBwYWRkaW5nOiAnOHB4IDExcHgnLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHBhZGRpbmc6ICczcHggOXB4JyxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICBwYWRkaW5nOiAnN3B4IDIxcHgnLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICBwYWRkaW5nOiAnNHB4IDEwcHgnLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICBwYWRkaW5nOiAnOHB4IDIycHgnLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS5kaXNhYmxlRWxldmF0aW9uICYmIHtcbiAgYm94U2hhZG93OiAnbm9uZScsXG4gICcmOmhvdmVyJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgJyY6YWN0aXZlJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59KTtcbmNvbnN0IEJ1dHRvblN0YXJ0SWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdTdGFydEljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnN0YXJ0SWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiA4LFxuICBtYXJnaW5MZWZ0OiAtNFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luTGVmdDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbkVuZEljb24gPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnRW5kSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuZW5kSWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiAtNCxcbiAgbWFyZ2luTGVmdDogOFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IC0yXG59LCBjb21tb25JY29uU3R5bGVzKG93bmVyU3RhdGUpKSk7XG5jb25zdCBCdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZUNvbnRleHQsXG4gICAgY29sb3I6IGNvbG9yQ29udGV4dCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRDb250ZXh0LFxuICAgIGRpc2FibGVFbGV2YXRpb246IGRpc2FibGVFbGV2YXRpb25Db250ZXh0LFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZTogZGlzYWJsZUZvY3VzUmlwcGxlQ29udGV4dCxcbiAgICBkaXNhYmxlUmlwcGxlOiBkaXNhYmxlUmlwcGxlQ29udGV4dCxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aENvbnRleHQsXG4gICAgc2l6ZTogc2l6ZUNvbnRleHQsXG4gICAgdmFyaWFudDogdmFyaWFudENvbnRleHRcbiAgfSA9IFJlYWN0LnVzZUNvbnRleHQoQnV0dG9uR3JvdXBDb250ZXh0KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yOiBjb2xvclByb3AsXG4gICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICBkaXNhYmxlRWxldmF0aW9uOiBkaXNhYmxlRWxldmF0aW9uUHJvcCxcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGU6IGRpc2FibGVGb2N1c1JpcHBsZVByb3AsXG4gICAgZGlzYWJsZVJpcHBsZTogZGlzYWJsZVJpcHBsZVByb3AsXG4gICAgZW5kSWNvbjogZW5kSWNvblByb3AsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoUHJvcCxcbiAgICBzaXplOiBzaXplUHJvcCxcbiAgICBzdGFydEljb246IHN0YXJ0SWNvblByb3AsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50OiB2YXJpYW50UHJvcFxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgY29sb3IgPSBjb2xvclByb3AgfHwgY29sb3JDb250ZXh0IHx8ICdwcmltYXJ5JzsgLy8gVE9ETyB2NjogVXNlIG51bGxpc2ggY29hbGVzY2luZyAoPz8pIGluc3RlYWQgb2YgT1Igb3BlcmF0b3IgZm9yIHRoZXNlIGJvb2xlYW4gcHJvcHMgc28gdGhhdCB0aGVzZSBib29sZWFuIHByb3BzIGZvciBCdXR0b24gd2l0aCBCdXR0b25Hcm91cCBjb250ZXh0IHRha2UgcHJpb3JpdHkuIFNlZSBjb252ZXJzYXRpb24gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbXVpLW9yZy9tYXRlcmlhbC11aS9wdWxsLzI4NjQ1I2Rpc2N1c3Npb25fcjczODM4MDkwMi5cblxuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkUHJvcCB8fCBkaXNhYmxlZENvbnRleHQgfHwgZmFsc2U7XG4gIGNvbnN0IGRpc2FibGVFbGV2YXRpb24gPSBkaXNhYmxlRWxldmF0aW9uUHJvcCB8fCBkaXNhYmxlRWxldmF0aW9uQ29udGV4dCB8fCBmYWxzZTtcbiAgY29uc3QgZGlzYWJsZUZvY3VzUmlwcGxlID0gZGlzYWJsZUZvY3VzUmlwcGxlUHJvcCB8fCBkaXNhYmxlRm9jdXNSaXBwbGVDb250ZXh0IHx8IGZhbHNlO1xuICBjb25zdCBmdWxsV2lkdGggPSBmdWxsV2lkdGhQcm9wIHx8IGZ1bGxXaWR0aENvbnRleHQgfHwgZmFsc2U7XG4gIGNvbnN0IHNpemUgPSBzaXplUHJvcCB8fCBzaXplQ29udGV4dCB8fCAnbWVkaXVtJztcbiAgY29uc3QgdmFyaWFudCA9IHZhcmlhbnRQcm9wIHx8IHZhcmlhbnRDb250ZXh0IHx8ICd0ZXh0JztcbiAgY29uc3QgZGlzYWJsZVJpcHBsZSA9IGRpc2FibGVSaXBwbGVQcm9wIHx8IGRpc2FibGVSaXBwbGVDb250ZXh0IHx8IGZhbHNlO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcblxuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgY2xhc3NOYW1lQ29udGV4dCksXG4gICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGU6IGRpc2FibGVSaXBwbGUsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNoaWxkcmVuOiBbc3RhcnRJY29uLCBjaGlsZHJlbiwgZW5kSWNvbl1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b24ucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRob3NlIHRoZW1lIGNvbG9ycyB0aGF0IG1ha2Ugc2Vuc2UgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnZXJyb3InLCAnaW5mbycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgbm8gZWxldmF0aW9uIGlzIHVzZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRWxldmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgcGxhY2VkIGFmdGVyIHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGVuZEljb246IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJ1dHRvbiB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gbGluayB0byB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogSWYgZGVmaW5lZCwgYW4gYGFgIGVsZW1lbnQgd2lsbCBiZSB1c2VkIGFzIHRoZSByb290IG5vZGUuXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGJ1dHRvbiBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIEVsZW1lbnQgcGxhY2VkIGJlZm9yZSB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBzdGFydEljb246IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29udGFpbmVkJywgJ291dGxpbmVkJywgJ3RleHQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjsiLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCB1c2VMYXlvdXRFZmZlY3QsIHVzZUNvbnRleHQsIHVzZVJlZiwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCB7IGggYXMgaGFzT3duUHJvcGVydHksIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIHUgYXMgdXNlSW5zZXJ0aW9uRWZmZWN0TWF5YmUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1jYmVkNDUxZi5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBiIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCBhIGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGQgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtY2JlZDQ1MWYuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjEwLjBcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL19pc29sYXRlZC1obnJzXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vcGFja2FnZS5qc29uXCI6IFwiLi9wYWNrYWdlLmpzb25cIixcblx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcIi4vbWFjcm9cIjogXCIuL21hY3JvLmpzXCJcblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby5qc1wiLFxuXHRcdFwibWFjcm8uZC50c1wiLFxuXHRcdFwibWFjcm8uanMuZmxvd1wiXG5cdF0sXG5cdHNpZGVFZmZlY3RzOiBmYWxzZSxcblx0YXV0aG9yOiBcIkVtb3Rpb24gQ29udHJpYnV0b3JzXCIsXG5cdGxpY2Vuc2U6IFwiTUlUXCIsXG5cdHNjcmlwdHM6IHtcblx0XHRcInRlc3Q6dHlwZXNjcmlwdFwiOiBcImR0c2xpbnQgdHlwZXNcIlxuXHR9LFxuXHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBiYWJlbC9ydW50aW1lXCI6IFwiXjcuMTguM1wiLFxuXHRcdFwiQGVtb3Rpb24vYmFiZWwtcGx1Z2luXCI6IFwiXjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL2NhY2hlXCI6IFwiXjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcmlhbGl6ZVwiOiBcIl4xLjEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjBcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMFwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjAuMFwiLFxuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkBiYWJlbC9jb3JlXCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fSxcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvY29yZVwiOiBcIl43LjE4LjVcIixcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjEwLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjEwLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IHVzZUxheW91dEVmZmVjdDtcbnZhciB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSBmYWxzZTsgLy8gbWFpbnRhaW4gcGxhY2Ugb3ZlciByZXJlbmRlcnMuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcblxudmFyIEdsb2JhbCA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsICYmICggLy8gY2hlY2sgZm9yIGNsYXNzTmFtZSBhcyB3ZWxsIHNpbmNlIHRoZSB1c2VyIGlzXG4gIC8vIHByb2JhYmx5IHVzaW5nIHRoZSBjdXN0b20gY3JlYXRlRWxlbWVudCB3aGljaFxuICAvLyBtZWFucyBpdCB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgY2xhc3NOYW1lIHByb3BcbiAgLy8gJEZsb3dGaXhNZSBJIGRvbid0IHJlYWxseSB3YW50IHRvIGFkZCBpdCB0byB0aGUgdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3QgYmUgdXNlZFxuICBwcm9wcy5jbGFzc05hbWUgfHwgcHJvcHMuY3NzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgY3NzIHByb3Agb24gR2xvYmFsLCBkaWQgeW91IG1lYW4gdG8gdXNlIHRoZSBzdHlsZXMgcHJvcCBpbnN0ZWFkP1wiKTtcbiAgICB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgdXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSB1c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBHbG9iYWwuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkdsb2JhbCc7XG59XG5cbmZ1bmN0aW9uIGNzcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVTdHlsZXMoYXJncyk7XG59XG5cbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIG5hbWUgKyBcIntcIiArIGluc2VydGFibGUuc3R5bGVzICsgXCJ9XCIsXG4gICAgYW5pbTogMSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJfRU1PX1wiICsgdGhpcy5uYW1lICsgXCJfXCIgKyB0aGlzLnN0eWxlcyArIFwiX0VNT19cIjtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uIGNsYXNzbmFtZXMoYXJncykge1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZy5zdHlsZXMgIT09IHVuZGVmaW5lZCAmJiBhcmcubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1lvdSBoYXZlIHBhc3NlZCBzdHlsZXMgY3JlYXRlZCB3aXRoIGBjc3NgIGZyb20gYEBlbW90aW9uL3JlYWN0YCBwYWNrYWdlIHRvIHRoZSBgY3hgLlxcbicgKyAnYGN4YCBpcyBtZWFudCB0byBjb21wb3NlIGNsYXNzIG5hbWVzIChzdHJpbmdzKSBzbyB5b3Ugc2hvdWxkIGNvbnZlcnQgdGhvc2Ugc3R5bGVzIHRvIGEgY2xhc3MgbmFtZSBieSBwYXNzaW5nIHRoZW0gdG8gdGhlIGBjc3NgIHJlY2VpdmVkIGZyb20gPENsYXNzTmFtZXMvPiBjb21wb25lbnQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHZhciBydWxlcyA9IHVzZUluc2VydGlvbkVmZmVjdE1heWJlKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcyA9IGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiB1c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcgZm9yIHNvbWUgcmVhc29uIEplc3QgZXZhbHVhdGVzIG1vZHVsZXMgdHdpY2UgaWYgc29tZSBjb25zdW1pbmcgbW9kdWxlIGdldHMgbW9ja2VkIHdpdGggamVzdC5tb2NrXG5cbiAgdmFyIGlzSmVzdCA9IHR5cGVvZiBqZXN0ICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc0plc3QpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjZW50ZXJcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5sZXQgXyA9IHQgPT4gdCxcbiAgICBfdCxcbiAgICBfdDIsXG4gICAgX3QzLFxuICAgIF90NDtcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCcsXG4gIHNraXBTeDogdHJ1ZVxufSkoe1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHpJbmRleDogMCxcbiAgdG9wOiAwLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xufSk7IC8vIFRoaXMgYHN0eWxlZCgpYCBmdW5jdGlvbiBpbnZva2VzIGtleWZyYW1lcy4gYHN0eWxlZC1jb21wb25lbnRzYCBvbmx5IHN1cHBvcnRzIGtleWZyYW1lc1xuLy8gaW4gc3RyaW5nIHRlbXBsYXRlcy4gRG8gbm90IGNvbnZlcnQgdGhlc2Ugc3R5bGVzIGluIEpTIG9iamVjdCBhcyBpdCB3aWxsIGJyZWFrLlxuXG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSaXBwbGUgPSBzdHlsZWQoUmlwcGxlLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSaXBwbGUnXG59KShfdDQgfHwgKF90NCA9IF9gXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLiR7MH0ge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmLiR7MH0ge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBAbm9mbGlwICovXG4gICAgbGVmdDogMHB4O1xuICAgIHRvcDogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDI1MDBtcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMjAwbXM7XG4gIH1cbmApLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSwgZW50ZXJLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZywgZXhpdEtleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHB1bHNhdGVLZXlmcmFtZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQpO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICpcbiAqIFRPRE8gdjU6IE1ha2UgcHJpdmF0ZVxuICovXG5cbmNvbnN0IFRvdWNoUmlwcGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG91Y2hSaXBwbGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvdWNoUmlwcGxlJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2VudGVyOiBjZW50ZXJQcm9wID0gZmFsc2UsXG4gICAgY2xhc3NlcyA9IHt9LFxuICAgIGNsYXNzTmFtZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgW3JpcHBsZXMsIHNldFJpcHBsZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBuZXh0S2V5ID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCByaXBwbGVDYWxsYmFjayA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmlwcGxlQ2FsbGJhY2suY3VycmVudCkge1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCgpO1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbcmlwcGxlc10pOyAvLyBVc2VkIHRvIGZpbHRlciBvdXQgbW91c2UgZW11bGF0ZWQgZXZlbnRzIG9uIG1vYmlsZS5cblxuICBjb25zdCBpZ25vcmluZ01vdXNlRG93biA9IFJlYWN0LnVzZVJlZihmYWxzZSk7IC8vIFdlIHVzZSBhIHRpbWVyIGluIG9yZGVyIHRvIG9ubHkgc2hvdyB0aGUgcmlwcGxlcyBmb3IgdG91Y2ggXCJjbGlja1wiIGxpa2UgZXZlbnRzLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIHJpcHBsZSBmb3IgdG91Y2ggc2Nyb2xsIGV2ZW50cy5cblxuICBjb25zdCBzdGFydFRpbWVyID0gUmVhY3QudXNlUmVmKG51bGwpOyAvLyBUaGlzIGlzIHRoZSBob29rIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cyB0aW1lb3V0IGlzIHJlYWR5LlxuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG5cbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50KSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07IC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmlwcGxlXG5cbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcblxuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cblxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoKDIgKiByZWN0LndpZHRoICoqIDIgKyByZWN0LmhlaWdodCAqKiAyKSAvIDMpOyAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFuaW1hdGlvbiBpcyBicm9rZW4gb24gTW9iaWxlIENocm9tZSBpZiB0aGUgc2l6ZSBpcyBldmVuLlxuXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfSAvLyBUb3VjaGUgZGV2aWNlc1xuXG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGlzIGlzbid0IGFub3RoZXIgdG91Y2hzdGFydCBkdWUgdG8gbXVsdGl0b3VjaFxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgb25seSBjbGVhciBhIHNpbmdsZSB0aW1lciB3aGVuIHVubW91bnRpbmcgd2hpbGUgdHdvXG4gICAgICAvLyBhcmUgcnVubmluZ1xuICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgICAgIHJpcHBsZVgsXG4gICAgICAgICAgICByaXBwbGVZLFxuICAgICAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07IC8vIERlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHJpcHBsZSBlZmZlY3QuXG5cblxuICAgICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBERUxBWV9SSVBQTEUpOyAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0XSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHN0YXJ0VGltZXIuY3VycmVudCk7IC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoZW5kJyAmJiBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHN0YXJ0VGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzdG9wKGV2ZW50LCBjYik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcblxuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5Qcm9wICYmIG9uRXhpdGVkICE9IG51bGwpIHtcbiAgICAgIC8vIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAjb25FeGl0ZWRcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQob25FeGl0ZWQsIHRpbWVvdXQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBwdWxzYXRlcywgdHlwaWNhbGx5IGluZGljYXRpbmcgdGhlIGtleWJvYXJkIGZvY3VzIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWxzYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGlhbWV0ZXIgb2YgdGhlIHJpcHBsZS5cbiAgICovXG4gIHJpcHBsZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVk6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIGV4aXQgZGVsYXlcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJpcHBsZTsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsIHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IFRvdWNoUmlwcGxlIGZyb20gJy4vVG91Y2hSaXBwbGUnO1xuaW1wb3J0IGJ1dHRvbkJhc2VDbGFzc2VzLCB7IGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuXG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvc2VkQ2xhc3Nlcztcbn07XG5cbmV4cG9ydCBjb25zdCBCdXR0b25CYXNlUm9vdCA9IHN0eWxlZCgnYnV0dG9uJywge1xuICBuYW1lOiAnTXVpQnV0dG9uQmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMCxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICBib3JkZXJSYWRpdXM6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgLy8gU28gd2UgdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgc3R5bGUgb2YgYSBuYXRpdmUgPGEgLz4gZWxlbWVudC5cbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cblxuICB9LFxuICBbYCYuJHtidXR0b25CYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAvLyBEaXNhYmxlIGxpbmsgaW50ZXJhY3Rpb25zXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBjb2xvckFkanVzdDogJ2V4YWN0J1xuICB9XG59KTtcbi8qKlxuICogYEJ1dHRvbkJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIGJ1dHRvbi5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBmb2N1cy9yaXBwbGUgbG9naWMuXG4gKi9cblxuY29uc3QgQnV0dG9uQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbkJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgY2VudGVyUmlwcGxlID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSA9IGZhbHNlLFxuICAgIGZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICBvbkJsdXIsXG4gICAgb25DbGljayxcbiAgICBvbkNvbnRleHRNZW51LFxuICAgIG9uRHJhZ0xlYXZlLFxuICAgIG9uRm9jdXMsXG4gICAgb25Gb2N1c1Zpc2libGUsXG4gICAgb25LZXlEb3duLFxuICAgIG9uS2V5VXAsXG4gICAgb25Nb3VzZURvd24sXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIG9uTW91c2VVcCxcbiAgICBvblRvdWNoRW5kLFxuICAgIG9uVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydCxcbiAgICB0YWJJbmRleCA9IDAsXG4gICAgVG91Y2hSaXBwbGVQcm9wcyxcbiAgICB0eXBlXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBidXR0b25SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJpcHBsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG5cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+ICh7XG4gICAgZm9jdXNWaXNpYmxlOiAoKSA9PiB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBidXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSksIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlKSB7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZVJpcHBsZSwgZm9jdXNSaXBwbGUsIGZvY3VzVmlzaWJsZV0pO1xuXG4gIGZ1bmN0aW9uIHVzZVJpcHBsZUhhbmRsZXIocmlwcGxlQWN0aW9uLCBldmVudENhbGxiYWNrLCBza2lwUmlwcGxlQWN0aW9uID0gZGlzYWJsZVRvdWNoUmlwcGxlKSB7XG4gICAgcmV0dXJuIHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgICAgZXZlbnRDYWxsYmFjayhldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlnbm9yZSA9IHNraXBSaXBwbGVBY3Rpb247XG5cbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Nb3VzZURvd24pO1xuICBjb25zdCBoYW5kbGVDb250ZXh0TWVudSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkNvbnRleHRNZW51KTtcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uRHJhZ0xlYXZlKTtcbiAgY29uc3QgaGFuZGxlTW91c2VVcCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbk1vdXNlVXApO1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcblxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgaWYgKCFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIH1cblxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuXG4gICAgICBpZiAob25Gb2N1c1Zpc2libGUpIHtcbiAgICAgICAgb25Gb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGlzTm9uTmF0aXZlQnV0dG9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvblJlZi5jdXJyZW50O1xuICAgIHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50ICE9PSAnYnV0dG9uJyAmJiAhKGJ1dHRvbi50YWdOYW1lID09PSAnQScgJiYgYnV0dG9uLmhyZWYpO1xuICB9O1xuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG5cblxuICBjb25zdCBrZXlkb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGtleSBpcyBhbHJlYWR5IGRvd24gdG8gYXZvaWQgcmVwZWF0cyBiZWluZyBjb3VudGVkIGFzIG11bHRpcGxlIGFjdGl2YXRpb25zXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmICFrZXlkb3duUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5zdGFydChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9IC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuXG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFkaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBjYWxsaW5nIHByZXZlbnREZWZhdWx0IGluIGtleVVwIG9uIGEgPGJ1dHRvbj4gd2lsbCBub3QgZGlzcGF0Y2ggYSBjbGljayBldmVudCBpZiBTcGFjZSBpcyBwcmVzc2VkXG4gICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL2J1dHRvbi1rZXl1cC1wcmV2ZW50ZGVmYXVsdC1kbjdmMFxuICAgIGlmIChmb2N1c1JpcHBsZSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBvbktleVVwKGV2ZW50KTtcbiAgICB9IC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuXG5cbiAgICBpZiAob25DbGljayAmJiBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgbGV0IENvbXBvbmVudFByb3AgPSBjb21wb25lbnQ7XG5cbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG5cbiAgY29uc3QgYnV0dG9uUHJvcHMgPSB7fTtcblxuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicpIHtcbiAgICBidXR0b25Qcm9wcy50eXBlID0gdHlwZSA9PT0gdW5kZWZpbmVkID8gJ2J1dHRvbicgOiB0eXBlO1xuICAgIGJ1dHRvblByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvdGhlci5ocmVmICYmICFvdGhlci50bykge1xuICAgICAgYnV0dG9uUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU93blJlZiA9IHVzZUZvcmtSZWYoZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgaGFuZGxlT3duUmVmKTtcbiAgY29uc3QgW21vdW50ZWRTdGF0ZSwgc2V0TW91bnRlZFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRNb3VudGVkU3RhdGUodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgZW5hYmxlVG91Y2hSaXBwbGUgPSBtb3VudGVkU3RhdGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgIWRpc2FibGVkO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChlbmFibGVUb3VjaFJpcHBsZSAmJiAhcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIGBjb21wb25lbnRgIHByb3AgcHJvdmlkZWQgdG8gQnV0dG9uQmFzZSBpcyBpbnZhbGlkLicsICdQbGVhc2UgbWFrZSBzdXJlIHRoZSBjaGlsZHJlbiBwcm9wIGlzIHJlbmRlcmVkIGluIHRoaXMgY3VzdG9tIGNvbXBvbmVudC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2VuYWJsZVRvdWNoUmlwcGxlXSk7XG4gIH1cblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2VudGVyUmlwcGxlLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlUmlwcGxlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSxcbiAgICBmb2N1c1JpcHBsZSxcbiAgICB0YWJJbmRleCxcbiAgICBmb2N1c1Zpc2libGVcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cblxuICAgIC8qIFRvdWNoUmlwcGxlIGlzIG9ubHkgbmVlZGVkIGNsaWVudC1zaWRlLCB4MiBib29zdCBvbiB0aGUgc2VydmVyLiAqL1xuICAgIF9qc3goVG91Y2hSaXBwbGUsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmlwcGxlUmVmLFxuICAgICAgY2VudGVyOiBjZW50ZXJSaXBwbGVcbiAgICB9LCBUb3VjaFJpcHBsZVByb3BzKSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbkJhc2UucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGVzIGFyZSBjZW50ZXJlZC5cbiAgICogVGhleSB3b24ndCBzdGFydCBhdCB0aGUgY3Vyc29yIGludGVyYWN0aW9uIHBvc2l0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2VudGVyUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvdWNoIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL21hc3Rlci9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5hbnksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaE1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AsIEhUTUxFbGVtZW50VHlwZSwgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgYXMgdXNlRW5oYW5jZWRFZmZlY3QsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfc2V0UmVmIGFzIHNldFJlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG4vKipcbiAqIFBvcnRhbHMgcHJvdmlkZSBhIGZpcnN0LWNsYXNzIHdheSB0byByZW5kZXIgY2hpbGRyZW4gaW50byBhIERPTSBub2RlXG4gKiB0aGF0IGV4aXN0cyBvdXRzaWRlIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICovXG5cblxuY29uc3QgUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9ydGFsKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbW91bnROb2RlLCBzZXRNb3VudE5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBjaGlsZHJlbi5yZWYgOiBudWxsLCByZWYpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRNb3VudE5vZGUoZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBkaXNhYmxlUG9ydGFsXSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW91bnROb2RlICYmICFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRSZWYocmVmLCBtb3VudE5vZGUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc2V0UmVmKHJlZiwgbnVsbCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZWYsIG1vdW50Tm9kZSwgZGlzYWJsZVBvcnRhbF0pO1xuXG4gIGlmIChkaXNhYmxlUG9ydGFsKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgcmV0dXJuIG1vdW50Tm9kZSA/IC8qI19fUFVSRV9fKi9SZWFjdERPTS5jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIG1vdW50Tm9kZSkgOiBtb3VudE5vZGU7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcnRhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIHRvIHJlbmRlciBpbnRvIHRoZSBgY29udGFpbmVyYC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgUG9ydGFsWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFBvcnRhbC5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3csIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbi8vIElzIGEgdmVydGljYWwgc2Nyb2xsYmFyIGRpc3BsYXllZD9cbmZ1bmN0aW9uIGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSB7XG4gIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKTtcblxuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgPiBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KSB7XG4gIGlmIChzaG93KSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVyLCBtb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCBlbGVtZW50c1RvRXhjbHVkZSA9IFtdLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIGNvbnN0IGJsYWNrbGlzdFRhZ05hbWVzID0gWydURU1QTEFURScsICdTQ1JJUFQnLCAnU1RZTEUnXTtcbiAgW10uZm9yRWFjaC5jYWxsKGNvbnRhaW5lci5jaGlsZHJlbiwgZWxlbWVudCA9PiB7XG4gICAgaWYgKGJsYWNrbGlzdC5pbmRleE9mKGVsZW1lbnQpID09PSAtMSAmJiBibGFja2xpc3RUYWdOYW1lcy5pbmRleE9mKGVsZW1lbnQudGFnTmFtZSkgPT09IC0xKSB7XG4gICAgICBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleE9mKGl0ZW1zLCBjYWxsYmFjaykge1xuICBsZXQgaWR4ID0gLTE7XG4gIGl0ZW1zLnNvbWUoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKGl0ZW0pKSB7XG4gICAgICBpZHggPSBpbmRleDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcykge1xuICBjb25zdCByZXN0b3JlU3R5bGUgPSBbXTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVySW5mby5jb250YWluZXI7XG5cbiAgaWYgKCFwcm9wcy5kaXNhYmxlU2Nyb2xsTG9jaykge1xuICAgIGlmIChpc092ZXJmbG93aW5nKGNvbnRhaW5lcikpIHtcbiAgICAgIC8vIENvbXB1dGUgdGhlIHNpemUgYmVmb3JlIGFwcGx5aW5nIG92ZXJmbG93IGhpZGRlbiB0byBhdm9pZCBhbnkgc2Nyb2xsIGp1bXBzLlxuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUob3duZXJEb2N1bWVudChjb250YWluZXIpKTtcbiAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgIHByb3BlcnR5OiAncGFkZGluZy1yaWdodCcsXG4gICAgICAgIGVsOiBjb250YWluZXJcbiAgICAgIH0pOyAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG5cbiAgICAgIGNvbnRhaW5lci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoY29udGFpbmVyKSArIHNjcm9sbGJhclNpemV9cHhgOyAvLyAubXVpLWZpeGVkIGlzIGEgZ2xvYmFsIGhlbHBlci5cblxuICAgICAgY29uc3QgZml4ZWRFbGVtZW50cyA9IG93bmVyRG9jdW1lbnQoY29udGFpbmVyKS5xdWVyeVNlbGVjdG9yQWxsKCcubXVpLWZpeGVkJyk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwoZml4ZWRFbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQsXG4gICAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBlbDogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkgKyBzY3JvbGxiYXJTaXplfXB4YDtcbiAgICAgIH0pO1xuICAgIH0gLy8gSW1wcm92ZSBHYXRzYnkgc3VwcG9ydFxuICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2ZvcmNlLXZlcnRpY2FsLXNjcm9sbGJhci9cblxuXG4gICAgY29uc3QgcGFyZW50ID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coY29udGFpbmVyKTtcbiAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSAocGFyZW50ID09IG51bGwgPyB2b2lkIDAgOiBwYXJlbnQubm9kZU5hbWUpID09PSAnSFRNTCcgJiYgY29udGFpbmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5vdmVyZmxvd1kgPT09ICdzY3JvbGwnID8gcGFyZW50IDogY29udGFpbmVyOyAvLyBCbG9jayB0aGUgc2Nyb2xsIGV2ZW4gaWYgbm8gc2Nyb2xsYmFyIGlzIHZpc2libGUgdG8gYWNjb3VudCBmb3IgbW9iaWxlIGtleWJvYXJkXG4gICAgLy8gc2NyZWVuc2l6ZSBzaHJpbmsuXG5cbiAgICByZXN0b3JlU3R5bGUucHVzaCh7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93LFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdycsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1gsXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93LXgnLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dZLFxuICAgICAgcHJvcGVydHk6ICdvdmVyZmxvdy15JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9KTtcbiAgICBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG4gICAgcmVzdG9yZVN0eWxlLmZvckVhY2goKHtcbiAgICAgIHZhbHVlLFxuICAgICAgZWwsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiByZXN0b3JlO1xufVxuXG5mdW5jdGlvbiBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpIHtcbiAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBbXTtcbiAgW10uZm9yRWFjaC5jYWxsKGNvbnRhaW5lci5jaGlsZHJlbiwgZWxlbWVudCA9PiB7XG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpID09PSAndHJ1ZScpIHtcbiAgICAgIGhpZGRlblNpYmxpbmdzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGhpZGRlblNpYmxpbmdzO1xufVxuXG4vKipcbiAqIEBpZ25vcmUgLSBkbyBub3QgZG9jdW1lbnQuXG4gKlxuICogUHJvcGVyIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGNvbnRhaW5lcnMgYW5kIHRoZSBtb2RhbHMgaW4gdGhvc2UgY29udGFpbmVycy5cbiAqIFNpbXBsaWZpZWQsIGJ1dCBpbnNwaXJlZCBieSByZWFjdC1vdmVybGF5J3MgTW9kYWxNYW5hZ2VyIGNsYXNzLlxuICogVXNlZCBieSB0aGUgTW9kYWwgdG8gZW5zdXJlIHByb3BlciBzdHlsaW5nIG9mIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGFsTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29udGFpbmVycyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGFscyA9IFtdO1xuICAgIHRoaXMuY29udGFpbmVycyA9IFtdO1xuICB9XG5cbiAgYWRkKG1vZGFsLCBjb250YWluZXIpIHtcbiAgICBsZXQgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmluZGV4T2YobW9kYWwpO1xuXG4gICAgaWYgKG1vZGFsSW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG5cbiAgICBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMubGVuZ3RoO1xuICAgIHRoaXMubW9kYWxzLnB1c2gobW9kYWwpOyAvLyBJZiB0aGUgbW9kYWwgd2UgYXJlIGFkZGluZyBpcyBhbHJlYWR5IGluIHRoZSBET00uXG5cbiAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcik7XG4gICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lciwgbW9kYWwubW91bnQsIG1vZGFsLm1vZGFsUmVmLCBoaWRkZW5TaWJsaW5ncywgdHJ1ZSk7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5jb250YWluZXIgPT09IGNvbnRhaW5lcik7XG5cbiAgICBpZiAoY29udGFpbmVySW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcnNbY29udGFpbmVySW5kZXhdLm1vZGFscy5wdXNoKG1vZGFsKTtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVycy5wdXNoKHtcbiAgICAgIG1vZGFsczogW21vZGFsXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHJlc3RvcmU6IG51bGwsXG4gICAgICBoaWRkZW5TaWJsaW5nc1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG5cbiAgbW91bnQobW9kYWwsIHByb3BzKSB7XG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5tb2RhbHMuaW5kZXhPZihtb2RhbCkgIT09IC0xKTtcbiAgICBjb25zdCBjb250YWluZXJJbmZvID0gdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XTtcblxuICAgIGlmICghY29udGFpbmVySW5mby5yZXN0b3JlKSB7XG4gICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUgPSBoYW5kbGVDb250YWluZXIoY29udGFpbmVySW5mbywgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShtb2RhbCkge1xuICAgIGNvbnN0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcblxuICAgIGlmIChtb2RhbEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVySW5kZXggPSBmaW5kSW5kZXhPZih0aGlzLmNvbnRhaW5lcnMsIGl0ZW0gPT4gaXRlbS5tb2RhbHMuaW5kZXhPZihtb2RhbCkgIT09IC0xKTtcbiAgICBjb25zdCBjb250YWluZXJJbmZvID0gdGhpcy5jb250YWluZXJzW2NvbnRhaW5lckluZGV4XTtcbiAgICBjb250YWluZXJJbmZvLm1vZGFscy5zcGxpY2UoY29udGFpbmVySW5mby5tb2RhbHMuaW5kZXhPZihtb2RhbCksIDEpO1xuICAgIHRoaXMubW9kYWxzLnNwbGljZShtb2RhbEluZGV4LCAxKTsgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgbW9kYWwgaW4gYSBjb250YWluZXIsIGNsZWFuIHVwIHRoZSBjb250YWluZXIuXG5cbiAgICBpZiAoY29udGFpbmVySW5mby5tb2RhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBUaGUgbW9kYWwgbWlnaHQgYmUgY2xvc2VkIGJlZm9yZSBpdCBoYWQgdGhlIGNoYW5jZSB0byBiZSBtb3VudGVkIGluIHRoZSBET00uXG4gICAgICBpZiAoY29udGFpbmVySW5mby5yZXN0b3JlKSB7XG4gICAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgbW9kYWwgd2Fzbid0IGluIHRoZSBET00geWV0LlxuICAgICAgICBhcmlhSGlkZGVuKG1vZGFsLm1vZGFsUmVmLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgYXJpYUhpZGRlblNpYmxpbmdzKGNvbnRhaW5lckluZm8uY29udGFpbmVyLCBtb2RhbC5tb3VudCwgbW9kYWwubW9kYWxSZWYsIGNvbnRhaW5lckluZm8uaGlkZGVuU2libGluZ3MsIGZhbHNlKTtcbiAgICAgIHRoaXMuY29udGFpbmVycy5zcGxpY2UoY29udGFpbmVySW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgbWFrZSBzdXJlIHRoZSBuZXh0IHRvcCBtb2RhbCBpcyB2aXNpYmxlIHRvIGEgc2NyZWVuIHJlYWRlci5cbiAgICAgIGNvbnN0IG5leHRUb3AgPSBjb250YWluZXJJbmZvLm1vZGFsc1tjb250YWluZXJJbmZvLm1vZGFscy5sZW5ndGggLSAxXTsgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuXG4gICAgICBpZiAobmV4dFRvcC5tb2RhbFJlZikge1xuICAgICAgICBhcmlhSGlkZGVuKG5leHRUb3AubW9kYWxSZWYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgfVxuXG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cblxufSIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgY29uc2lzdGVudC1yZXR1cm4sIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLXRhYmluZGV4ICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wLCBlbGVtZW50QWNjZXB0aW5nUmVmLCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnOyAvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZm9jdXMtdHJhcC90YWJiYWJsZVxuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgY2FuZGlkYXRlc1NlbGVjdG9yID0gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnLCAnYVtocmVmXScsICdidXR0b24nLCAnW3RhYmluZGV4XScsICdhdWRpb1tjb250cm9sc10nLCAndmlkZW9bY29udHJvbHNdJywgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJ10uam9pbignLCcpO1xuXG5mdW5jdGlvbiBnZXRUYWJJbmRleChub2RlKSB7XG4gIGNvbnN0IHRhYmluZGV4QXR0ciA9IHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCk7XG5cbiAgaWYgKCFOdW1iZXIuaXNOYU4odGFiaW5kZXhBdHRyKSkge1xuICAgIHJldHVybiB0YWJpbmRleEF0dHI7XG4gIH0gLy8gQnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NjExMDgmcT1jb250ZW50ZWRpdGFibGUlMjB0YWJpbmRleCZjYW49MlxuICAvLyBzbyBpZiB0aGV5IGRvbid0IGhhdmUgYSB0YWJpbmRleCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IHNldCwgYXNzdW1lIGl0J3MgMC5cbiAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAvLyAgYHRhYkluZGV4YCBvZiAtMSB3aGVuIHRoZSAndGFiaW5kZXgnIGF0dHJpYnV0ZSBpc24ndCBzcGVjaWZpZWQgaW4gdGhlIERPTSxcbiAgLy8gIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAvLyAgYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgLy8gIG9yZGVyLCBjb25zaWRlciB0aGVpciB0YWIgaW5kZXggdG8gYmUgMC5cblxuXG4gIGlmIChub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnIHx8IChub2RlLm5vZGVOYW1lID09PSAnQVVESU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdWSURFTycgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ0RFVEFJTFMnKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUudGFiSW5kZXg7XG59XG5cbmZ1bmN0aW9uIGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSB7XG4gIGlmIChub2RlLnRhZ05hbWUgIT09ICdJTlBVVCcgfHwgbm9kZS50eXBlICE9PSAncmFkaW8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFub2RlLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBnZXRSYWRpbyA9IHNlbGVjdG9yID0+IG5vZGUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBpbnB1dFt0eXBlPVwicmFkaW9cIl0ke3NlbGVjdG9yfWApO1xuXG4gIGxldCByb3ZpbmcgPSBnZXRSYWRpbyhgW25hbWU9XCIke25vZGUubmFtZX1cIl06Y2hlY2tlZGApO1xuXG4gIGlmICghcm92aW5nKSB7XG4gICAgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdYCk7XG4gIH1cblxuICByZXR1cm4gcm92aW5nICE9PSBub2RlO1xufVxuXG5mdW5jdGlvbiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpIHtcbiAgaWYgKG5vZGUuZGlzYWJsZWQgfHwgbm9kZS50YWdOYW1lID09PSAnSU5QVVQnICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRHZXRUYWJiYWJsZShyb290KSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJOb2RlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiTm9kZXMgPSBbXTtcbiAgQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGwoY2FuZGlkYXRlc1NlbGVjdG9yKSkuZm9yRWFjaCgobm9kZSwgaSkgPT4ge1xuICAgIGNvbnN0IG5vZGVUYWJJbmRleCA9IGdldFRhYkluZGV4KG5vZGUpO1xuXG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gLTEgfHwgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZVRhYkluZGV4ID09PSAwKSB7XG4gICAgICByZWd1bGFyVGFiTm9kZXMucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZFRhYk5vZGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogbm9kZVRhYkluZGV4LFxuICAgICAgICBub2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3JkZXJlZFRhYk5vZGVzLnNvcnQoKGEsIGIpID0+IGEudGFiSW5kZXggPT09IGIudGFiSW5kZXggPyBhLmRvY3VtZW50T3JkZXIgLSBiLmRvY3VtZW50T3JkZXIgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleCkubWFwKGEgPT4gYS5ub2RlKS5jb25jYXQocmVndWxhclRhYk5vZGVzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIFV0aWxpdHkgY29tcG9uZW50IHRoYXQgbG9ja3MgZm9jdXMgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBVbnN0YWJsZV9UcmFwRm9jdXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgIGdldFRhYmJhYmxlID0gZGVmYXVsdEdldFRhYmJhYmxlLFxuICAgIGlzRW5hYmxlZCA9IGRlZmF1bHRJc0VuYWJsZWQsXG4gICAgb3BlblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlnbm9yZU5leHRFbmZvcmNlRm9jdXMgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3Qgc2VudGluZWxTdGFydCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2VudGluZWxFbmQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG5vZGVUb1Jlc3RvcmUgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlYWN0Rm9jdXNFdmVudFRhcmdldCA9IFJlYWN0LnVzZVJlZihudWxsKTsgLy8gVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgd2hlbiBkaXNhYmxlQXV0b0ZvY3VzIGlzIHRydWUuXG4gIC8vIEl0IHdhaXRzIGZvciB0aGUgYWN0aXZlIGVsZW1lbnQgdG8gbW92ZSBpbnRvIHRoZSBjb21wb25lbnQgdG8gYWN0aXZhdGUuXG5cbiAgY29uc3QgYWN0aXZhdGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgcm9vdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihjaGlsZHJlbi5yZWYsIHJvb3RSZWYpO1xuICBjb25zdCBsYXN0S2V5ZG93biA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9ICFkaXNhYmxlQXV0b0ZvY3VzO1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgb3Blbl0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocm9vdFJlZi5jdXJyZW50KTtcblxuICAgIGlmICghcm9vdFJlZi5jdXJyZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQuaGFzQXR0cmlidXRlKCd0YWJJbmRleCcpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIG1vZGFsIGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBhY2NlcHQgZm9jdXMuJywgJ0ZvciB0aGUgYmVuZWZpdCBvZiBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCAnICsgJ3RoZSB0YWJJbmRleCBvZiB0aGUgbm9kZSBpcyBiZWluZyBzZXQgdG8gXCItMVwiLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgLTEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcm9vdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIHJlc3RvcmVMYXN0Rm9jdXMoKVxuICAgICAgaWYgKCFkaXNhYmxlUmVzdG9yZUZvY3VzKSB7XG4gICAgICAgIC8vIEluIElFMTEgaXQgaXMgcG9zc2libGUgZm9yIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgdG8gYmUgbnVsbCByZXN1bHRpbmdcbiAgICAgICAgLy8gaW4gbm9kZVRvUmVzdG9yZS5jdXJyZW50IGJlaW5nIG51bGwuXG4gICAgICAgIC8vIE5vdCBhbGwgZWxlbWVudHMgaW4gSUUxMSBoYXZlIGEgZm9jdXMgbWV0aG9kLlxuICAgICAgICAvLyBPbmNlIElFMTEgc3VwcG9ydCBpcyBkcm9wcGVkIHRoZSBmb2N1cygpIGNhbGwgY2FuIGJlIHVuY29uZGl0aW9uYWwuXG4gICAgICAgIGlmIChub2RlVG9SZXN0b3JlLmN1cnJlbnQgJiYgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKSB7XG4gICAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfTsgLy8gTWlzc2luZyBgZGlzYWJsZVJlc3RvcmVGb2N1c2Agd2hpY2ggaXMgZmluZS5cbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGNoYW5naW5nIHRoYXQgcHJvcCBvbiBhbiBvcGVuIFRyYXBGb2N1c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG5cbiAgICBjb25zdCBjb250YWluID0gbmF0aXZlRXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiByb290RWxlbWVudFxuICAgICAgfSA9IHJvb3RSZWY7IC8vIENsZWFudXAgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBsYXppbHkgaW4gUmVhY3QgMTcuXG4gICAgICAvLyBDb250YWluIGNhbiBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgY29tcG9uZW50IGJlaW5nIHVubW91bnRlZCBhbmQgaXRzIGNsZWFudXAgZnVuY3Rpb24gYmVpbmcgcnVuLlxuXG4gICAgICBpZiAocm9vdEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRvYy5oYXNGb2N1cygpIHx8IGRpc2FibGVFbmZvcmNlRm9jdXMgfHwgIWlzRW5hYmxlZCgpIHx8IGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCkge1xuICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAvLyBpZiB0aGUgZm9jdXMgZXZlbnQgaXMgbm90IGNvbWluZyBmcm9tIGluc2lkZSB0aGUgY2hpbGRyZW4ncyByZWFjdCB0cmVlLCByZXNldCB0aGUgcmVmc1xuICAgICAgICBpZiAobmF0aXZlRXZlbnQgJiYgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgIT09IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBkb2MuYWN0aXZlRWxlbWVudCAhPT0gcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQpIHtcbiAgICAgICAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAocmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFjdGl2YXRlZC5jdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhYmJhYmxlID0gW107XG5cbiAgICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSBzZW50aW5lbFN0YXJ0LmN1cnJlbnQgfHwgZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgICB0YWJiYWJsZSA9IGdldFRhYmJhYmxlKHJvb3RSZWYuY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFiYmFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBfbGFzdEtleWRvd24kY3VycmVudCwgX2xhc3RLZXlkb3duJGN1cnJlbnQyO1xuXG4gICAgICAgICAgY29uc3QgaXNTaGlmdFRhYiA9IEJvb2xlYW4oKChfbGFzdEtleWRvd24kY3VycmVudCA9IGxhc3RLZXlkb3duLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbGFzdEtleWRvd24kY3VycmVudC5zaGlmdEtleSkgJiYgKChfbGFzdEtleWRvd24kY3VycmVudDIgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQyLmtleSkgPT09ICdUYWInKTtcbiAgICAgICAgICBjb25zdCBmb2N1c05leHQgPSB0YWJiYWJsZVswXTtcbiAgICAgICAgICBjb25zdCBmb2N1c1ByZXZpb3VzID0gdGFiYmFibGVbdGFiYmFibGUubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBpZiAoaXNTaGlmdFRhYikge1xuICAgICAgICAgICAgZm9jdXNQcmV2aW91cy5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c05leHQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBsb29wRm9jdXMgPSBuYXRpdmVFdmVudCA9PiB7XG4gICAgICBsYXN0S2V5ZG93bi5jdXJyZW50ID0gbmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmIChkaXNhYmxlRW5mb3JjZUZvY3VzIHx8ICFpc0VuYWJsZWQoKSB8fCBuYXRpdmVFdmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gTWFrZSBzdXJlIHRoZSBuZXh0IHRhYiBzdGFydHMgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICAvLyBkb2MuYWN0aXZlRWxlbWVudCByZWZlcmVzIHRvIHRoZSBvcmlnaW4uXG5cblxuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSByb290UmVmLmN1cnJlbnQgJiYgbmF0aXZlRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGhlIG5leHQgY29udGFpbiBhc1xuICAgICAgICAvLyBpdCB3aWxsIHRyeSB0byBtb3ZlIHRoZSBmb2N1cyBiYWNrIHRvIHRoZSByb290UmVmIGVsZW1lbnQuXG4gICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHNlbnRpbmVsRW5kLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7IC8vIFdpdGggRWRnZSwgU2FmYXJpIGFuZCBGaXJlZm94LCBubyBmb2N1cyByZWxhdGVkIGV2ZW50cyBhcmUgZmlyZWQgd2hlbiB0aGUgZm9jdXNlZCBhcmVhIHN0b3BzIGJlaW5nIGEgZm9jdXNlZCBhcmVhLlxuICAgIC8vIGUuZy4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NTYxLlxuICAgIC8vIEluc3RlYWQsIHdlIGNhbiBsb29rIGlmIHRoZSBhY3RpdmUgZWxlbWVudCB3YXMgcmVzdG9yZWQgb24gdGhlIEJPRFkgZWxlbWVudC5cbiAgICAvL1xuICAgIC8vIFRoZSB3aGF0d2cgc3BlYyBkZWZpbmVzIGhvdyB0aGUgYnJvd3NlciBzaG91bGQgYmVoYXZlIGJ1dCBkb2VzIG5vdCBleHBsaWNpdGx5IG1lbnRpb24gYW55IGV2ZW50czpcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI2ZvY3VzLWZpeHVwLXJ1bGUuXG5cbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgY29udGFpbigpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGNvbnRhaW4pO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpO1xuICAgIH07XG4gIH0sIFtkaXNhYmxlQXV0b0ZvY3VzLCBkaXNhYmxlRW5mb3JjZUZvY3VzLCBkaXNhYmxlUmVzdG9yZUZvY3VzLCBpc0VuYWJsZWQsIG9wZW4sIGdldFRhYmJhYmxlXSk7XG5cbiAgY29uc3Qgb25Gb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cblxuICAgIGFjdGl2YXRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBjaGlsZHJlblByb3BzSGFuZGxlciA9IGNoaWxkcmVuLnByb3BzLm9uRm9jdXM7XG5cbiAgICBpZiAoY2hpbGRyZW5Qcm9wc0hhbmRsZXIpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHNIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9jdXNTZW50aW5lbCA9IGV2ZW50ID0+IHtcbiAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBub2RlVG9SZXN0b3JlLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIH1cblxuICAgIGFjdGl2YXRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChcImRpdlwiLCB7XG4gICAgICB0YWJJbmRleDogMCxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzU2VudGluZWwsXG4gICAgICByZWY6IHNlbnRpbmVsU3RhcnQsXG4gICAgICBcImRhdGEtdGVzdFwiOiBcInNlbnRpbmVsU3RhcnRcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIG9uRm9jdXNcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbEVuZCxcbiAgICAgIFwiZGF0YS10ZXN0XCI6IFwic2VudGluZWxFbmRcIlxuICAgIH0pXVxuICB9KTtcbn1cblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVW5zdGFibGVfVHJhcEZvY3VzLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZixcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJhcCBmb2N1cyB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgdHJhcCBmb2N1cyBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgdHJhcCBmb2N1cyBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFwIGZvY3VzIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSB0cmFwIGZvY3VzIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSB0cmFwIGZvY3VzIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYXAgZm9jdXMgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIHRyYXAgZm9jdXMgaXMgaGlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb3JkZXJlZCB0YWJiYWJsZSBub2RlcyAoaS5lLiBpbiB0YWIgb3JkZXIpIHdpdGhpbiB0aGUgcm9vdC5cbiAgICogRm9yIGluc3RhbmNlLCB5b3UgY2FuIHByb3ZpZGUgdGhlIFwidGFiYmFibGVcIiBucG0gZGVwZW5kZW5jeS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxuICAgKi9cbiAgZ2V0VGFiYmFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgZXh0ZW5kcyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIEl0IGFsbG93cyB0byB0b2dnbGUgdGhlIG9wZW4gc3RhdGUgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3IgYSByZXJlbmRlciB3aGVuIGNoYW5naW5nIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogVGhpcyBwcm9wIHNob3VsZCBiZSBtZW1vaXplZC5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0cmFwIGZvY3VzIG1vdW50ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdElzRW5hYmxlZCgpIHtcbiAgICogICByZXR1cm4gdHJ1ZTtcbiAgICogfVxuICAgKi9cbiAgaXNFbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBmb2N1cyBpcyBsb2NrZWQuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgVW5zdGFibGVfVHJhcEZvY3VzWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFVuc3RhYmxlX1RyYXBGb2N1cy5wcm9wVHlwZXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBVbnN0YWJsZV9UcmFwRm9jdXM7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxVbnN0eWxlZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbFVuc3R5bGVkQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xvc2VBZnRlclRyYW5zaXRpb25cIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiY29udGFpbmVyXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm1hbmFnZXJcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib25LZXlEb3duXCIsIFwib3BlblwiLCBcInRoZW1lXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmLCBIVE1MRWxlbWVudFR5cGUsIHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9jcmVhdGVDaGFpbmVkRnVuY3Rpb24gYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLCB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICcuLi9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJy4uL3V0aWxzL2lzSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgTW9kYWxNYW5hZ2VyLCB7IGFyaWFIaWRkZW4gfSBmcm9tICcuL01vZGFsTWFuYWdlcic7XG5pbXBvcnQgVHJhcEZvY3VzIGZyb20gJy4uL1Vuc3RhYmxlX1RyYXBGb2N1cyc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxVbnN0eWxlZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIG9wZW4sXG4gICAgZXhpdGVkLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFvcGVuICYmIGV4aXRlZCAmJiAnaGlkZGVuJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNb2RhbFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGdldEhhc1RyYW5zaXRpb24ocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLmNoaWxkcmVuID8gcHJvcHMuY2hpbGRyZW4ucHJvcHMuaGFzT3duUHJvcGVydHkoJ2luJykgOiBmYWxzZTtcbn0gLy8gQSBtb2RhbCBtYW5hZ2VyIHVzZWQgdG8gdHJhY2sgYW5kIG1hbmFnZSB0aGUgc3RhdGUgb2Ygb3BlbiBNb2RhbHMuXG4vLyBNb2RhbHMgZG9uJ3Qgb3BlbiBvbiB0aGUgc2VydmVyIHNvIHRoaXMgd29uJ3QgY29uZmxpY3Qgd2l0aCBjb25jdXJyZW50IHJlcXVlc3RzLlxuXG5cbmNvbnN0IGRlZmF1bHRNYW5hZ2VyID0gbmV3IE1vZGFsTWFuYWdlcigpO1xuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cblxuY29uc3QgTW9kYWxVbnN0eWxlZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsVW5zdHlsZWQocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgQmFja2Ryb3BDb21wb25lbnQsXG4gICAgQmFja2Ryb3BQcm9wcyxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCxcbiAgICBjbGFzc05hbWUsXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2UsXG4gICAgaGlkZUJhY2tkcm9wID0gZmFsc2UsXG4gICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICAvLyBwcml2YXRlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICBtYW5hZ2VyID0gZGVmYXVsdE1hbmFnZXIsXG4gICAgb25CYWNrZHJvcENsaWNrLFxuICAgIG9uQ2xvc2UsXG4gICAgb25LZXlEb3duLFxuICAgIG9wZW4sXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG4gICAgdGhlbWUsXG4gICAgb25UcmFuc2l0aW9uRW50ZXIsXG4gICAgb25UcmFuc2l0aW9uRXhpdGVkXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBbZXhpdGVkLCBzZXRFeGl0ZWRdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IG1vZGFsID0gUmVhY3QudXNlUmVmKHt9KTtcbiAgY29uc3QgbW91bnROb2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBtb2RhbFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihtb2RhbFJlZiwgcmVmKTtcbiAgY29uc3QgaGFzVHJhbnNpdGlvbiA9IGdldEhhc1RyYW5zaXRpb24ocHJvcHMpO1xuXG4gIGNvbnN0IGdldERvYyA9ICgpID0+IG93bmVyRG9jdW1lbnQobW91bnROb2RlUmVmLmN1cnJlbnQpO1xuXG4gIGNvbnN0IGdldE1vZGFsID0gKCkgPT4ge1xuICAgIG1vZGFsLmN1cnJlbnQubW9kYWxSZWYgPSBtb2RhbFJlZi5jdXJyZW50O1xuICAgIG1vZGFsLmN1cnJlbnQubW91bnROb2RlID0gbW91bnROb2RlUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIG1vZGFsLmN1cnJlbnQ7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91bnRlZCA9ICgpID0+IHtcbiAgICBtYW5hZ2VyLm1vdW50KGdldE1vZGFsKCksIHtcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gICAgfSk7IC8vIEZpeCBhIGJ1ZyBvbiBDaHJvbWUgd2hlcmUgdGhlIHNjcm9sbCBpc24ndCBpbml0aWFsbHkgMC5cblxuICAgIG1vZGFsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVPcGVuID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRDb250YWluZXIgPSBnZXRDb250YWluZXIoY29udGFpbmVyKSB8fCBnZXREb2MoKS5ib2R5O1xuICAgIG1hbmFnZXIuYWRkKGdldE1vZGFsKCksIHJlc29sdmVkQ29udGFpbmVyKTsgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgbW91bnRlZC5cblxuICAgIGlmIChtb2RhbFJlZi5jdXJyZW50KSB7XG4gICAgICBoYW5kbGVNb3VudGVkKCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNUb3BNb2RhbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IG1hbmFnZXIuaXNUb3BNb2RhbChnZXRNb2RhbCgpKSwgW21hbmFnZXJdKTtcbiAgY29uc3QgaGFuZGxlUG9ydGFsUmVmID0gdXNlRXZlbnRDYWxsYmFjayhub2RlID0+IHtcbiAgICBtb3VudE5vZGVSZWYuY3VycmVudCA9IG5vZGU7XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3BlbiAmJiBpc1RvcE1vZGFsKCkpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJpYUhpZGRlbihtb2RhbFJlZi5jdXJyZW50LCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBtYW5hZ2VyLnJlbW92ZShnZXRNb2RhbCgpKTtcbiAgfSwgW21hbmFnZXJdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlQ2xvc2VdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaGFuZGxlT3BlbigpO1xuICAgIH0gZWxzZSBpZiAoIWhhc1RyYW5zaXRpb24gfHwgIWNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH1cbiAgfSwgW29wZW4sIGhhbmRsZUNsb3NlLCBoYXNUcmFuc2l0aW9uLCBjbG9zZUFmdGVyVHJhbnNpdGlvbiwgaGFuZGxlT3Blbl0pO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcCxcbiAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbixcbiAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrLFxuICAgIGV4aXRlZCxcbiAgICBoaWRlQmFja2Ryb3AsXG4gICAga2VlcE1vdW50ZWRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCFoYXNUcmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVudGVyID0gKCkgPT4ge1xuICAgIHNldEV4aXRlZChmYWxzZSk7XG5cbiAgICBpZiAob25UcmFuc2l0aW9uRW50ZXIpIHtcbiAgICAgIG9uVHJhbnNpdGlvbkVudGVyKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQodHJ1ZSk7XG5cbiAgICBpZiAob25UcmFuc2l0aW9uRXhpdGVkKSB7XG4gICAgICBvblRyYW5zaXRpb25FeGl0ZWQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VBZnRlclRyYW5zaXRpb24pIHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgIG9uQmFja2Ryb3BDbGljayhldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9IC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdGFrZSBldmVudC5kZWZhdWx0UHJldmVudGVkIGludG8gYWNjb3VudDpcbiAgICAvL1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gICAgLy8gY2xpY2tpbmcgYSBjaGVja2JveCB0byBjaGVjayBpdCwgaGl0dGluZyBhIGJ1dHRvbiB0byBzdWJtaXQgYSBmb3JtLFxuICAgIC8vIGFuZCBoaXR0aW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGEgdGV4dCBpbnB1dCBldGMuXG4gICAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cblxuXG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VzY2FwZScgfHwgIWlzVG9wTW9kYWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGlzYWJsZUVzY2FwZUtleURvd24pIHtcbiAgICAgIC8vIFN3YWxsb3cgdGhlIGV2ZW50LCBpbiBjYXNlIHNvbWVvbmUgaXMgbGlzdGVuaW5nIGZvciB0aGUgZXNjYXBlIGtleSBvbiB0aGUgYm9keS5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCAnZXNjYXBlS2V5RG93bicpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGlsZFByb3BzID0ge307XG5cbiAgaWYgKGNoaWxkcmVuLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZFByb3BzLnRhYkluZGV4ID0gJy0xJztcbiAgfSAvLyBJdCdzIGEgVHJhbnNpdGlvbiBsaWtlIGNvbXBvbmVudFxuXG5cbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICBjaGlsZFByb3BzLm9uRW50ZXIgPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRW50ZXIsIGNoaWxkcmVuLnByb3BzLm9uRW50ZXIpO1xuICAgIGNoaWxkUHJvcHMub25FeGl0ZWQgPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oaGFuZGxlRXhpdGVkLCBjaGlsZHJlbi5wcm9wcy5vbkV4aXRlZCk7XG4gIH1cblxuICBjb25zdCBSb290ID0gY29tcG9uZW50cy5Sb290IHx8IGNvbXBvbmVudDtcbiAgY29uc3Qgcm9vdFByb3BzID0gY29tcG9uZW50c1Byb3BzLnJvb3QgfHwge307XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3J0YWwsIHtcbiAgICByZWY6IGhhbmRsZVBvcnRhbFJlZixcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBkaXNhYmxlUG9ydGFsOiBkaXNhYmxlUG9ydGFsLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJwcmVzZW50YXRpb25cIlxuICAgIH0sIHJvb3RQcm9wcywgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKSxcbiAgICAgIHRoZW1lXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBbIWhpZGVCYWNrZHJvcCAmJiBCYWNrZHJvcENvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9fanN4KEJhY2tkcm9wQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUJhY2tkcm9wQ2xpY2tcbiAgICAgIH0sIEJhY2tkcm9wUHJvcHMpKSA6IG51bGwsIC8qI19fUFVSRV9fKi9fanN4KFRyYXBGb2N1cywge1xuICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzOiBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBkaXNhYmxlUmVzdG9yZUZvY3VzLFxuICAgICAgICBpc0VuYWJsZWQ6IGlzVG9wTW9kYWwsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBjaGlsZFByb3BzKVxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbFVuc3R5bGVkLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBIGJhY2tkcm9wIGNvbXBvbmVudC4gVGhpcyBwcm9wIGVuYWJsZXMgY3VzdG9tIGJhY2tkcm9wIHJlbmRlcmluZy5cbiAgICovXG4gIEJhY2tkcm9wQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgQmFja2Ryb3BVbnN0eWxlZGBdKC9hcGkvYmFja2Ryb3AtdW5zdHlsZWQvKSBlbGVtZW50LlxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGl0dGluZyBlc2NhcGUgd2lsbCBub3QgZmlyZSB0aGUgYG9uQ2xvc2VgIGNhbGxiYWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVzY2FwZUtleURvd246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2Nyb2xsIGxvY2sgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2Nyb2xsTG9jazogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIG5vdCByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGVCYWNrZHJvcDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBNb2RhbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYmFja2Ryb3AgaXMgY2xpY2tlZC5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsVW5zdHlsZWQ7IiwiLy8gQSBjaGFuZ2Ugb2YgdGhlIGJyb3dzZXIgem9vbSBjaGFuZ2UgdGhlIHNjcm9sbGJhciBzaXplLlxuLy8gQ3JlZGl0IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzQ4OGZkOGFmYzUzNWNhM2E2YWQ0ZGM1ODFmNWU4OTIxN2I2YTM2YWMvanMvc3JjL3V0aWwvc2Nyb2xsYmFyLmpzI0wxNC1MMThcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUoZG9jKSB7XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aCk7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tkcm9wVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCYWNrZHJvcCcsIHNsb3QpO1xufVxuY29uc3QgYmFja2Ryb3BVbnN0eWxlZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCYWNrZHJvcCcsIFsncm9vdCcsICdpbnZpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBiYWNrZHJvcFVuc3R5bGVkQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImludmlzaWJsZVwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICcuLi9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJy4uL3V0aWxzL2lzSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRCYWNrZHJvcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYmFja2Ryb3BVbnN0eWxlZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW52aXNpYmxlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpbnZpc2libGUgJiYgJ2ludmlzaWJsZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgQmFja2Ryb3BVbnN0eWxlZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJhY2tkcm9wVW5zdHlsZWQocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3AsXG4gICAgY2xhc3NOYW1lLFxuICAgIGludmlzaWJsZSA9IGZhbHNlLFxuICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cbiAgICB0aGVtZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wLFxuICAgIGludmlzaWJsZVxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBjb21wb25lbnRzLlJvb3QgfHwgY29tcG9uZW50O1xuICBjb25zdCByb290UHJvcHMgPSBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3QsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWVcbiAgfSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSksXG4gICAgdGhlbWVcbiAgfSwge1xuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJhY2tkcm9wVW5zdHlsZWQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhY2tkcm9wLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCYWNrZHJvcC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgaW52aXNpYmxlLlxuICAgKiBJdCBjYW4gYmUgdXNlZCB3aGVuIHJlbmRlcmluZyBhIHBvcG92ZXIgb3IgYSBjdXN0b20gc2VsZWN0IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGludmlzaWJsZTogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFVuc3R5bGVkOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBkdXJhdGlvbiB9IGZyb20gJy4uL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IHJlZmxvdywgZ2V0VHJhbnNpdGlvblByb3BzIH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDFcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDFcbiAgfVxufTtcbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0ge1xuICBlbnRlcjogZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gIGV4aXQ6IGR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbn07XG4vKipcbiAqIFRoZSBGYWRlIHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW01vZGFsXSgvY29tcG9uZW50cy9tb2RhbC8pIGNvbXBvbmVudC5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cblxuY29uc3QgRmFkZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZhZGUocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgYXBwZWFyID0gdHJ1ZSxcbiAgICBjaGlsZHJlbixcbiAgICBlYXNpbmcsXG4gICAgaW46IGluUHJvcCxcbiAgICBvbkVudGVyLFxuICAgIG9uRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nLFxuICAgIG9uRXhpdCxcbiAgICBvbkV4aXRlZCxcbiAgICBvbkV4aXRpbmcsXG4gICAgc3R5bGUsXG4gICAgdGltZW91dCA9IGRlZmF1bHRUaW1lb3V0LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZvcmVpZ25SZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBmb3JlaWduUmVmKTtcblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50OyAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cblxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG5cbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcblxuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcblxuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IGR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IGR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImNsYXNzTmFtZVwiLCBcImludmlzaWJsZVwiLCBcIm9wZW5cIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGlzSG9zdENvbXBvbmVudCB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgQmFja2Ryb3BVbnN0eWxlZCwgeyBiYWNrZHJvcFVuc3R5bGVkQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9CYWNrZHJvcFVuc3R5bGVkJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgRmFkZSBmcm9tICcuLi9GYWRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgYmFja2Ryb3BDbGFzc2VzID0gYmFja2Ryb3BVbnN0eWxlZENsYXNzZXM7XG5cbmNvbnN0IGV4dGVuZFV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5cbmNvbnN0IEJhY2tkcm9wUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQmFja2Ryb3AnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5pbnZpc2libGUgJiYgc3R5bGVzLmludmlzaWJsZV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50J1xufSwgb3duZXJTdGF0ZS5pbnZpc2libGUgJiYge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbn0pKTtcbmNvbnN0IEJhY2tkcm9wID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQmFja2Ryb3AoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfY29tcG9uZW50c1Byb3BzJHJvb3Q7XG5cbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQmFja2Ryb3AnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgY2xhc3NOYW1lLFxuICAgIGludmlzaWJsZSA9IGZhbHNlLFxuICAgIG9wZW4sXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEZhZGVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBpbnZpc2libGVcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IGV4dGVuZFV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGluOiBvcGVuLFxuICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFVuc3R5bGVkLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIGludmlzaWJsZTogaW52aXNpYmxlLFxuICAgICAgY29tcG9uZW50czogX2V4dGVuZHMoe1xuICAgICAgICBSb290OiBCYWNrZHJvcFJvb3RcbiAgICAgIH0sIGNvbXBvbmVudHMpLFxuICAgICAgY29tcG9uZW50c1Byb3BzOiB7XG4gICAgICAgIHJvb3Q6IF9leHRlbmRzKHt9LCBjb21wb25lbnRzUHJvcHMucm9vdCwgKCFjb21wb25lbnRzLlJvb3QgfHwgIWlzSG9zdENvbXBvbmVudChjb21wb25lbnRzLlJvb3QpKSAmJiB7XG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIChfY29tcG9uZW50c1Byb3BzJHJvb3QgPSBjb21wb25lbnRzUHJvcHMucm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkcm9vdC5vd25lclN0YXRlKVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQmFja2Ryb3AucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgQmFja2Ryb3AuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhY2tkcm9wLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBpbnZpc2libGUuXG4gICAqIEl0IGNhbiBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIGEgcG9wb3ZlciBvciBhIGN1c3RvbSBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW52aXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcDsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNoaWxkcmVuXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgaXNIb3N0Q29tcG9uZW50IH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYsIEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IE1vZGFsVW5zdHlsZWQsIHsgbW9kYWxVbnN0eWxlZENsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvTW9kYWxVbnN0eWxlZCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4uL0JhY2tkcm9wJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgbW9kYWxDbGFzc2VzID0gbW9kYWxVbnN0eWxlZENsYXNzZXM7XG5cbmNvbnN0IGV4dGVuZFV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIHJldHVybiBvd25lclN0YXRlLmNsYXNzZXM7XG59O1xuXG5jb25zdCBNb2RhbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgc3R5bGVzLmhpZGRlbl07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB6SW5kZXg6IHRoZW1lLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcbi8qKlxuICogTW9kYWwgaXMgYSBsb3dlci1sZXZlbCBjb25zdHJ1Y3QgdGhhdCBpcyBsZXZlcmFnZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqIC0gW0RpYWxvZ10oL2FwaS9kaWFsb2cvKVxuICogLSBbRHJhd2VyXSgvYXBpL2RyYXdlci8pXG4gKiAtIFtNZW51XSgvYXBpL21lbnUvKVxuICogLSBbUG9wb3Zlcl0oL2FwaS9wb3BvdmVyLylcbiAqXG4gKiBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbW9kYWwgZGlhbG9nLCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgdGhlIFtEaWFsb2ddKC9hcGkvZGlhbG9nLykgY29tcG9uZW50XG4gKiByYXRoZXIgdGhhbiBkaXJlY3RseSB1c2luZyBNb2RhbC5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBzaGFyZXMgbWFueSBjb25jZXB0cyB3aXRoIFtyZWFjdC1vdmVybGF5c10oaHR0cHM6Ly9yZWFjdC1ib290c3RyYXAuZ2l0aHViLmlvL3JlYWN0LW92ZXJsYXlzLyNtb2RhbHMpLlxuICovXG5cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfY29tcG9uZW50c1Byb3BzJHJvb3Q7XG5cbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBCYWNrZHJvcENvbXBvbmVudCA9IE1vZGFsQmFja2Ryb3AsXG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24gPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnRzID0ge30sXG4gICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICBrZWVwTW91bnRlZCA9IGZhbHNlXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBbZXhpdGVkLCBzZXRFeGl0ZWRdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IGNvbW1vblByb3BzID0ge1xuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgZGlzYWJsZVNjcm9sbExvY2ssXG4gICAgaGlkZUJhY2tkcm9wLFxuICAgIGtlZXBNb3VudGVkXG4gIH07XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywgY29tbW9uUHJvcHMsIHtcbiAgICBleGl0ZWRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IGV4dGVuZFV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTW9kYWxVbnN0eWxlZCwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudHM6IF9leHRlbmRzKHtcbiAgICAgIFJvb3Q6IE1vZGFsUm9vdFxuICAgIH0sIGNvbXBvbmVudHMpLFxuICAgIGNvbXBvbmVudHNQcm9wczoge1xuICAgICAgcm9vdDogX2V4dGVuZHMoe30sIGNvbXBvbmVudHNQcm9wcy5yb290LCAoIWNvbXBvbmVudHMuUm9vdCB8fCAhaXNIb3N0Q29tcG9uZW50KGNvbXBvbmVudHMuUm9vdCkpICYmIHtcbiAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIChfY29tcG9uZW50c1Byb3BzJHJvb3QgPSBjb21wb25lbnRzUHJvcHMucm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb21wb25lbnRzUHJvcHMkcm9vdC5vd25lclN0YXRlKVxuICAgICAgfSlcbiAgICB9LFxuICAgIEJhY2tkcm9wQ29tcG9uZW50OiBCYWNrZHJvcENvbXBvbmVudCxcbiAgICBvblRyYW5zaXRpb25FbnRlcjogKCkgPT4gc2V0RXhpdGVkKGZhbHNlKSxcbiAgICBvblRyYW5zaXRpb25FeGl0ZWQ6ICgpID0+IHNldEV4aXRlZCh0cnVlKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSwgY29tbW9uUHJvcHMsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNb2RhbC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEJhY2tkcm9wYF0oL2FwaS9iYWNrZHJvcC8pIGVsZW1lbnQuXG4gICAqL1xuICBCYWNrZHJvcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcblxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgbW9kYWwgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBtb2RhbCB3aGlsZSBvcGVuLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgbW9kYWwgbGVzc1xuICAgKiBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGxpa2Ugc2NyZWVuIHJlYWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRW5mb3JjZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBoaXR0aW5nIGVzY2FwZSB3aWxsIG5vdCBmaXJlIHRoZSBgb25DbG9zZWAgY2FsbGJhY2suXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRXNjYXBlS2V5RG93bjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcmVzdG9yZSBmb2N1cyB0byBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudCBvbmNlXG4gICAqIG1vZGFsIGlzIGhpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFja2Ryb3AgaXMgbm90IHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZUJhY2tkcm9wOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXREaWFsb2dVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpYWxvZycsIHNsb3QpO1xufVxuY29uc3QgZGlhbG9nQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aURpYWxvZycsIFsncm9vdCcsICdzY3JvbGxQYXBlcicsICdzY3JvbGxCb2R5JywgJ2NvbnRhaW5lcicsICdwYXBlcicsICdwYXBlclNjcm9sbFBhcGVyJywgJ3BhcGVyU2Nyb2xsQm9keScsICdwYXBlcldpZHRoRmFsc2UnLCAncGFwZXJXaWR0aFhzJywgJ3BhcGVyV2lkdGhTbScsICdwYXBlcldpZHRoTWQnLCAncGFwZXJXaWR0aExnJywgJ3BhcGVyV2lkdGhYbCcsICdwYXBlckZ1bGxXaWR0aCcsICdwYXBlckZ1bGxTY3JlZW4nXSk7XG5leHBvcnQgZGVmYXVsdCBkaWFsb2dDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsV2lkdGhcIiwgXCJtYXhXaWR0aFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJDb21wb25lbnRcIiwgXCJQYXBlclByb3BzXCIsIFwic2Nyb2xsXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBNb2RhbCBmcm9tICcuLi9Nb2RhbCc7XG5pbXBvcnQgRmFkZSBmcm9tICcuLi9GYWRlJztcbmltcG9ydCB7IGR1cmF0aW9uIH0gZnJvbSAnLi4vc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCBQYXBlciBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGRpYWxvZ0NsYXNzZXMsIHsgZ2V0RGlhbG9nVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9kaWFsb2dDbGFzc2VzJztcbmltcG9ydCBEaWFsb2dDb250ZXh0IGZyb20gJy4vRGlhbG9nQ29udGV4dCc7XG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi4vQmFja2Ryb3AnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERpYWxvZ0JhY2tkcm9wID0gc3R5bGVkKEJhY2tkcm9wLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnQmFja2Ryb3AnLFxuICBvdmVycmlkZXM6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYmFja2Ryb3Bcbn0pKHtcbiAgLy8gSW1wcm92ZSBzY3JvbGxhYmxlIGRpYWxvZyBzdXBwb3J0LlxuICB6SW5kZXg6IC0xXG59KTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgc2Nyb2xsLFxuICAgIG1heFdpZHRoLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBjb250YWluZXI6IFsnY29udGFpbmVyJywgYHNjcm9sbCR7Y2FwaXRhbGl6ZShzY3JvbGwpfWBdLFxuICAgIHBhcGVyOiBbJ3BhcGVyJywgYHBhcGVyU2Nyb2xsJHtjYXBpdGFsaXplKHNjcm9sbCl9YCwgYHBhcGVyV2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG1heFdpZHRoKSl9YCwgZnVsbFdpZHRoICYmICdwYXBlckZ1bGxXaWR0aCcsIGZ1bGxTY3JlZW4gJiYgJ3BhcGVyRnVsbFNjcmVlbiddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IERpYWxvZ1Jvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aURpYWxvZycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZSBNb2RhbCBpbmxpbmUtc3R5bGUuXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZSAhaW1wb3J0YW50J1xuICB9XG59KTtcbmNvbnN0IERpYWxvZ0NvbnRhaW5lciA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRGlhbG9nJyxcbiAgc2xvdDogJ0NvbnRhaW5lcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXNbYHNjcm9sbCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNjcm9sbCl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGhlaWdodDogJzEwMCUnLFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0sIG93bmVyU3RhdGUuc2Nyb2xsID09PSAncGFwZXInICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ2JvZHknICYmIHtcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICcmOmFmdGVyJzoge1xuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB3aWR0aDogJzAnXG4gIH1cbn0pKTtcbmNvbnN0IERpYWxvZ1BhcGVyID0gc3R5bGVkKFBhcGVyLCB7XG4gIG5hbWU6ICdNdWlEaWFsb2cnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnBhcGVyLCBzdHlsZXNbYHNjcm9sbFBhcGVyJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2Nyb2xsKX1gXSwgc3R5bGVzW2BwYXBlcldpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhvd25lclN0YXRlLm1heFdpZHRoKSl9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5wYXBlckZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHN0eWxlcy5wYXBlckZ1bGxTY3JlZW5dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDMyLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIC8vIEZpeCBJRTExIGlzc3VlLCB0byByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59LCBvd25lclN0YXRlLnNjcm9sbCA9PT0gJ3BhcGVyJyAmJiB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5zY3JvbGwgPT09ICdib2R5JyAmJiB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgdGV4dEFsaWduOiAnbGVmdCcgLy8gJ2luaXRpYWwnIGRvZXNuJ3Qgd29yayBvbiBJRTExXG5cbn0sICFvd25lclN0YXRlLm1heFdpZHRoICYmIHtcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbn0sIG93bmVyU3RhdGUubWF4V2lkdGggPT09ICd4cycgJiYge1xuICBtYXhXaWR0aDogdGhlbWUuYnJlYWtwb2ludHMudW5pdCA9PT0gJ3B4JyA/IE1hdGgubWF4KHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54cywgNDQ0KSA6IGAke3RoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcy54c30ke3RoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YCxcbiAgW2AmLiR7ZGlhbG9nQ2xhc3Nlcy5wYXBlclNjcm9sbEJvZHl9YF06IHtcbiAgICBbdGhlbWUuYnJlYWtwb2ludHMuZG93bihNYXRoLm1heCh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMueHMsIDQ0NCkgKyAzMiAqIDIpXToge1xuICAgICAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSA2NHB4KSdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUubWF4V2lkdGggIT09ICd4cycgJiYge1xuICBtYXhXaWR0aDogYCR7dGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW293bmVyU3RhdGUubWF4V2lkdGhdfSR7dGhlbWUuYnJlYWtwb2ludHMudW5pdH1gLFxuICBbYCYuJHtkaWFsb2dDbGFzc2VzLnBhcGVyU2Nyb2xsQm9keX1gXToge1xuICAgIFt0aGVtZS5icmVha3BvaW50cy5kb3duKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1tvd25lclN0YXRlLm1heFdpZHRoXSArIDMyICogMildOiB7XG4gICAgICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJ2NhbGMoMTAwJSAtIDY0cHgpJ1xufSwgb3duZXJTdGF0ZS5mdWxsU2NyZWVuICYmIHtcbiAgbWFyZ2luOiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgW2AmLiR7ZGlhbG9nQ2xhc3Nlcy5wYXBlclNjcm9sbEJvZHl9YF06IHtcbiAgICBtYXJnaW46IDAsXG4gICAgbWF4V2lkdGg6ICcxMDAlJ1xuICB9XG59KSk7XG5jb25zdCBkZWZhdWx0VHJhbnNpdGlvbkR1cmF0aW9uID0ge1xuICBlbnRlcjogZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gIGV4aXQ6IGR1cmF0aW9uLmxlYXZpbmdTY3JlZW5cbn07XG4vKipcbiAqIERpYWxvZ3MgYXJlIG92ZXJsYWlkIG1vZGFsIHBhcGVyIGJhc2VkIGNvbXBvbmVudHMgd2l0aCBhIGJhY2tkcm9wLlxuICovXG5cbmNvbnN0IERpYWxvZyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRGlhbG9nJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IGFyaWFMYWJlbGxlZGJ5UHJvcCxcbiAgICBCYWNrZHJvcENvbXBvbmVudCxcbiAgICBCYWNrZHJvcFByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93biA9IGZhbHNlLFxuICAgIGZ1bGxTY3JlZW4gPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBtYXhXaWR0aCA9ICdzbScsXG4gICAgb25CYWNrZHJvcENsaWNrLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICBQYXBlckNvbXBvbmVudCA9IFBhcGVyLFxuICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICBzY3JvbGwgPSAncGFwZXInLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBGYWRlLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IGRlZmF1bHRUcmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgZnVsbFNjcmVlbixcbiAgICBmdWxsV2lkdGgsXG4gICAgbWF4V2lkdGgsXG4gICAgc2Nyb2xsXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYmFja2Ryb3BDbGljayA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBjbGlja2luZyB0aGUgZGlhbG9nIGNvbnRlbnQuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBldmVudCBzdGFydHMgYW5kIGVuZHMgb24gdGhlIHNhbWUgRE9NIGVsZW1lbnQuXG4gICAgYmFja2Ryb3BDbGljay5jdXJyZW50ID0gZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIHRoZSBldmVudHMgbm90IGNvbWluZyBmcm9tIHRoZSBcImJhY2tkcm9wXCIuXG4gICAgaWYgKCFiYWNrZHJvcENsaWNrLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBiYWNrZHJvcENsaWNrLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgb25CYWNrZHJvcENsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCwgJ2JhY2tkcm9wQ2xpY2snKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXJpYUxhYmVsbGVkYnkgPSB1c2VJZChhcmlhTGFiZWxsZWRieVByb3ApO1xuICBjb25zdCBkaWFsb2dDb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGVJZDogYXJpYUxhYmVsbGVkYnlcbiAgICB9O1xuICB9LCBbYXJpYUxhYmVsbGVkYnldKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIEJhY2tkcm9wUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGFzOiBCYWNrZHJvcENvbXBvbmVudFxuICAgIH0sIEJhY2tkcm9wUHJvcHMpLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiB0cnVlLFxuICAgIEJhY2tkcm9wQ29tcG9uZW50OiBEaWFsb2dCYWNrZHJvcCxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bjogZGlzYWJsZUVzY2FwZUtleURvd24sXG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIG9uQ2xpY2s6IGhhbmRsZUJhY2tkcm9wQ2xpY2ssXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBhcHBlYXI6IHRydWUsXG4gICAgICBpbjogb3BlbixcbiAgICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCJcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dDb250YWluZXIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuY29udGFpbmVyKSxcbiAgICAgICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ1BhcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYXM6IFBhcGVyQ29tcG9uZW50LFxuICAgICAgICAgIGVsZXZhdGlvbjogMjQsXG4gICAgICAgICAgcm9sZTogXCJkaWFsb2dcIixcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5XG4gICAgICAgIH0sIFBhcGVyUHJvcHMsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgUGFwZXJQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBkaWFsb2dDb250ZXh0VmFsdWUsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9KVxuICAgICAgICB9KSlcbiAgICAgIH0pXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGlhbG9nLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgaWQocykgb2YgdGhlIGVsZW1lbnQocykgdGhhdCBkZXNjcmliZSB0aGUgZGlhbG9nLlxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgaWQocykgb2YgdGhlIGVsZW1lbnQocykgdGhhdCBsYWJlbCB0aGUgZGlhbG9nLlxuICAgKi9cbiAgJ2FyaWEtbGFiZWxsZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIEEgYmFja2Ryb3AgY29tcG9uZW50LiBUaGlzIHByb3AgZW5hYmxlcyBjdXN0b20gYmFja2Ryb3AgcmVuZGVyaW5nLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQmFja2Ryb3BQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogRGlhbG9nIGNoaWxkcmVuLCB1c3VhbGx5IHRoZSBpbmNsdWRlZCBzdWItY29tcG9uZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZGlhbG9nIGlzIGZ1bGwtc2NyZWVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFNjcmVlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGRpYWxvZyBzdHJldGNoZXMgdG8gYG1heFdpZHRoYC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGRpYWxvZyB3aWR0aCBncm93IGlzIGxpbWl0ZWQgYnkgdGhlIGRlZmF1bHQgbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBtYXgtd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICogVGhlIGRpYWxvZyB3aWR0aCBncm93cyB3aXRoIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4uXG4gICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgYG1heFdpZHRoYC5cbiAgICogQGRlZmF1bHQgJ3NtJ1xuICAgKi9cbiAgbWF4V2lkdGg6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKi9cbiAgb25CYWNrZHJvcENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIHRoZSBib2R5IG9mIHRoZSBkaWFsb2cuXG4gICAqIEBkZWZhdWx0IFBhcGVyXG4gICAqL1xuICBQYXBlckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGNvbnRhaW5lciBmb3Igc2Nyb2xsaW5nIHRoZSBkaWFsb2cuXG4gICAqIEBkZWZhdWx0ICdwYXBlcidcbiAgICovXG4gIHNjcm9sbDogUHJvcFR5cGVzLm9uZU9mKFsnYm9keScsICdwYXBlciddKSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHRyYW5zaXRpb24uXG4gICAqIFtGb2xsb3cgdGhpcyBndWlkZV0oL2NvbXBvbmVudHMvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgRmFkZVxuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICogQGRlZmF1bHQgeyBlbnRlcjogZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sIGV4aXQ6IGR1cmF0aW9uLmxlYXZpbmdTY3JlZW4gfVxuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIHRyYW5zaXRpb24gZWxlbWVudC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGVsZW1lbnQgaXMgYmFzZWQgb24gdGhpcyBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pIGNvbXBvbmVudC5cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IERpYWxvZzsiLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuY29uc3QgRGlhbG9nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRGlhbG9nQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdEaWFsb2dDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQ29udGV4dDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nQWN0aW9uc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRGlhbG9nQWN0aW9ucycsIHNsb3QpO1xufVxuY29uc3QgZGlhbG9nQWN0aW9uc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2dBY3Rpb25zJywgWydyb290JywgJ3NwYWNpbmcnXSk7XG5leHBvcnQgZGVmYXVsdCBkaWFsb2dBY3Rpb25zQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZVNwYWNpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0RGlhbG9nQWN0aW9uc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nQWN0aW9uc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVNwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlU3BhY2luZyAmJiAnc3BhY2luZyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGlhbG9nQWN0aW9uc1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBEaWFsb2dBY3Rpb25zUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRGlhbG9nQWN0aW9ucycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlU3BhY2luZyAmJiBzdHlsZXMuc3BhY2luZ107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcGFkZGluZzogOCxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gIGZsZXg6ICcwIDAgYXV0bydcbn0sICFvd25lclN0YXRlLmRpc2FibGVTcGFjaW5nICYmIHtcbiAgJyYgPiA6bm90KDpmaXJzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5MZWZ0OiA4XG4gIH1cbn0pKTtcbmNvbnN0IERpYWxvZ0FjdGlvbnMgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBEaWFsb2dBY3Rpb25zKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2dBY3Rpb25zJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVTcGFjaW5nID0gZmFsc2VcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlU3BhY2luZ1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChEaWFsb2dBY3Rpb25zUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEaWFsb2dBY3Rpb25zLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGFjdGlvbnMgZG8gbm90IGhhdmUgYWRkaXRpb25hbCBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU3BhY2luZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQWN0aW9uczsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlhbG9nQ29udGVudFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRGlhbG9nQ29udGVudCcsIHNsb3QpO1xufVxuY29uc3QgZGlhbG9nQ29udGVudENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlEaWFsb2dDb250ZW50JywgWydyb290JywgJ2RpdmlkZXJzJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGlhbG9nQ29udGVudENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRpdmlkZXJzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldERpYWxvZ0NvbnRlbnRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2RpYWxvZ0NvbnRlbnRDbGFzc2VzJztcbmltcG9ydCBkaWFsb2dUaXRsZUNsYXNzZXMgZnJvbSAnLi4vRGlhbG9nVGl0bGUvZGlhbG9nVGl0bGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpdmlkZXJzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXZpZGVycyAmJiAnZGl2aWRlcnMnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldERpYWxvZ0NvbnRlbnRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgRGlhbG9nQ29udGVudFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aURpYWxvZ0NvbnRlbnQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kaXZpZGVycyAmJiBzdHlsZXMuZGl2aWRlcnNdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBmbGV4OiAnMSAxIGF1dG8nLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIHBhZGRpbmc6ICcyMHB4IDI0cHgnXG59LCBvd25lclN0YXRlLmRpdmlkZXJzID8ge1xuICBwYWRkaW5nOiAnMTZweCAyNHB4JyxcbiAgYm9yZGVyVG9wOiBgMXB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5kaXZpZGVyfWAsXG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUuZGl2aWRlcn1gXG59IDoge1xuICBbYC4ke2RpYWxvZ1RpdGxlQ2xhc3Nlcy5yb290fSArICZgXToge1xuICAgIHBhZGRpbmdUb3A6IDBcbiAgfVxufSkpO1xuY29uc3QgRGlhbG9nQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aURpYWxvZ0NvbnRlbnQnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgZGl2aWRlcnMgPSBmYWxzZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpdmlkZXJzXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ0NvbnRlbnRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERpYWxvZ0NvbnRlbnQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgdG9wIGFuZCBib3R0b20gZGl2aWRlcnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXZpZGVyczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nQ29udGVudDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXREaWFsb2dUaXRsZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZGlhbG9nVGl0bGVDbGFzc2VzJztcbmltcG9ydCBEaWFsb2dDb250ZXh0IGZyb20gJy4uL0RpYWxvZy9EaWFsb2dDb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldERpYWxvZ1RpdGxlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IERpYWxvZ1RpdGxlUm9vdCA9IHN0eWxlZChUeXBvZ3JhcGh5LCB7XG4gIG5hbWU6ICdNdWlEaWFsb2dUaXRsZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBwYWRkaW5nOiAnMTZweCAyNHB4JyxcbiAgZmxleDogJzAgMCBhdXRvJ1xufSk7XG5jb25zdCBEaWFsb2dUaXRsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZ1RpdGxlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaWFsb2dUaXRsZSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBpZDogaWRQcm9wXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBvd25lclN0YXRlID0gcHJvcHM7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3Qge1xuICAgIHRpdGxlSWQ6IGlkID0gaWRQcm9wXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KERpYWxvZ0NvbnRleHQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRGlhbG9nVGl0bGVSb290LCBfZXh0ZW5kcyh7XG4gICAgY29tcG9uZW50OiBcImgyXCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmLFxuICAgIHZhcmlhbnQ6IFwiaDZcIixcbiAgICBpZDogaWRcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGlhbG9nVGl0bGUucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRGlhbG9nVGl0bGU7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpYWxvZ1RpdGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlEaWFsb2dUaXRsZScsIHNsb3QpO1xufVxuY29uc3QgZGlhbG9nVGl0bGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGlhbG9nVGl0bGUnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBkaWFsb2dUaXRsZUNsYXNzZXM7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmlkZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpdmlkZXInLCBzbG90KTtcbn1cbmNvbnN0IGRpdmlkZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGl2aWRlcicsIFsncm9vdCcsICdhYnNvbHV0ZScsICdmdWxsV2lkdGgnLCAnaW5zZXQnLCAnbWlkZGxlJywgJ2ZsZXhJdGVtJywgJ2xpZ2h0JywgJ3ZlcnRpY2FsJywgJ3dpdGhDaGlsZHJlbicsICd3aXRoQ2hpbGRyZW5WZXJ0aWNhbCcsICd0ZXh0QWxpZ25SaWdodCcsICd0ZXh0QWxpZ25MZWZ0JywgJ3dyYXBwZXInLCAnd3JhcHBlclZlcnRpY2FsJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGl2aWRlckNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFic29sdXRlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJmbGV4SXRlbVwiLCBcImxpZ2h0XCIsIFwib3JpZW50YXRpb25cIiwgXCJyb2xlXCIsIFwidGV4dEFsaWduXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldERpdmlkZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2RpdmlkZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhYnNvbHV0ZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc2VzLFxuICAgIGZsZXhJdGVtLFxuICAgIGxpZ2h0LFxuICAgIG9yaWVudGF0aW9uLFxuICAgIHRleHRBbGlnbixcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBhYnNvbHV0ZSAmJiAnYWJzb2x1dGUnLCB2YXJpYW50LCBsaWdodCAmJiAnbGlnaHQnLCBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiAndmVydGljYWwnLCBmbGV4SXRlbSAmJiAnZmxleEl0ZW0nLCBjaGlsZHJlbiAmJiAnd2l0aENoaWxkcmVuJywgY2hpbGRyZW4gJiYgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiYgJ3dpdGhDaGlsZHJlblZlcnRpY2FsJywgdGV4dEFsaWduID09PSAncmlnaHQnICYmIG9yaWVudGF0aW9uICE9PSAndmVydGljYWwnICYmICd0ZXh0QWxpZ25SaWdodCcsIHRleHRBbGlnbiA9PT0gJ2xlZnQnICYmIG9yaWVudGF0aW9uICE9PSAndmVydGljYWwnICYmICd0ZXh0QWxpZ25MZWZ0J10sXG4gICAgd3JhcHBlcjogWyd3cmFwcGVyJywgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiYgJ3dyYXBwZXJWZXJ0aWNhbCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RGl2aWRlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBEaXZpZGVyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRGl2aWRlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmFic29sdXRlICYmIHN0eWxlcy5hYnNvbHV0ZSwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUubGlnaHQgJiYgc3R5bGVzLmxpZ2h0LCBvd25lclN0YXRlLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmIHN0eWxlcy52ZXJ0aWNhbCwgb3duZXJTdGF0ZS5mbGV4SXRlbSAmJiBzdHlsZXMuZmxleEl0ZW0sIG93bmVyU3RhdGUuY2hpbGRyZW4gJiYgc3R5bGVzLndpdGhDaGlsZHJlbiwgb3duZXJTdGF0ZS5jaGlsZHJlbiAmJiBvd25lclN0YXRlLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmIHN0eWxlcy53aXRoQ2hpbGRyZW5WZXJ0aWNhbCwgb3duZXJTdGF0ZS50ZXh0QWxpZ24gPT09ICdyaWdodCcgJiYgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJyAmJiBzdHlsZXMudGV4dEFsaWduUmlnaHQsIG93bmVyU3RhdGUudGV4dEFsaWduID09PSAnbGVmdCcgJiYgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJyAmJiBzdHlsZXMudGV4dEFsaWduTGVmdF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMCxcbiAgLy8gUmVzZXQgYnJvd3NlciBkZWZhdWx0IHN0eWxlLlxuICBmbGV4U2hyaW5rOiAwLFxuICBib3JkZXJXaWR0aDogMCxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmRpdmlkZXIsXG4gIGJvcmRlckJvdHRvbVdpZHRoOiAndGhpbidcbn0sIG93bmVyU3RhdGUuYWJzb2x1dGUgJiYge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICB3aWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmxpZ2h0ICYmIHtcbiAgYm9yZGVyQ29sb3I6IGFscGhhKHRoZW1lLnBhbGV0dGUuZGl2aWRlciwgMC4wOClcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luc2V0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IDcyXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdtaWRkbGUnICYmIG93bmVyU3RhdGUub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJiB7XG4gIG1hcmdpbkxlZnQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIG1hcmdpblJpZ2h0OiB0aGVtZS5zcGFjaW5nKDIpXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdtaWRkbGUnICYmIG93bmVyU3RhdGUub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiYge1xuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMSksXG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygxKVxufSwgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiB7XG4gIGhlaWdodDogJzEwMCUnLFxuICBib3JkZXJCb3R0b21XaWR0aDogMCxcbiAgYm9yZGVyUmlnaHRXaWR0aDogJ3RoaW4nXG59LCBvd25lclN0YXRlLmZsZXhJdGVtICYmIHtcbiAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gIGhlaWdodDogJ2F1dG8nXG59KSwgKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLmNoaWxkcmVuICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgYm9yZGVyOiAwLFxuICAnJjo6YmVmb3JlLCAmOjphZnRlcic6IHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGJvcmRlclRvcDogYHRoaW4gc29saWQgJHt0aGVtZS5wYWxldHRlLmRpdmlkZXJ9YCxcbiAgICB0b3A6ICc1MCUnLFxuICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDUwJSknXG4gIH1cbn0pLCAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuY2hpbGRyZW4gJiYgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiB7XG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAnJjo6YmVmb3JlLCAmOjphZnRlcic6IHtcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB0b3A6ICcwJScsXG4gICAgbGVmdDogJzUwJScsXG4gICAgYm9yZGVyVG9wOiAwLFxuICAgIGJvcmRlckxlZnQ6IGB0aGluIHNvbGlkICR7dGhlbWUucGFsZXR0ZS5kaXZpZGVyfWAsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwJSknXG4gIH1cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS50ZXh0QWxpZ24gPT09ICdyaWdodCcgJiYgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJyAmJiB7XG4gICcmOjpiZWZvcmUnOiB7XG4gICAgd2lkdGg6ICc5MCUnXG4gIH0sXG4gICcmOjphZnRlcic6IHtcbiAgICB3aWR0aDogJzEwJSdcbiAgfVxufSwgb3duZXJTdGF0ZS50ZXh0QWxpZ24gPT09ICdsZWZ0JyAmJiBvd25lclN0YXRlLm9yaWVudGF0aW9uICE9PSAndmVydGljYWwnICYmIHtcbiAgJyY6OmJlZm9yZSc6IHtcbiAgICB3aWR0aDogJzEwJSdcbiAgfSxcbiAgJyY6OmFmdGVyJzoge1xuICAgIHdpZHRoOiAnOTAlJ1xuICB9XG59KSk7XG5jb25zdCBEaXZpZGVyV3JhcHBlciA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aURpdmlkZXInLFxuICBzbG90OiAnV3JhcHBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMud3JhcHBlciwgb3duZXJTdGF0ZS5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiBzdHlsZXMud3JhcHBlclZlcnRpY2FsXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gIHBhZGRpbmdMZWZ0OiBgY2FsYygke3RoZW1lLnNwYWNpbmcoMSl9ICogMS4yKWAsXG4gIHBhZGRpbmdSaWdodDogYGNhbGMoJHt0aGVtZS5zcGFjaW5nKDEpfSAqIDEuMilgXG59LCBvd25lclN0YXRlLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmIHtcbiAgcGFkZGluZ1RvcDogYGNhbGMoJHt0aGVtZS5zcGFjaW5nKDEpfSAqIDEuMilgLFxuICBwYWRkaW5nQm90dG9tOiBgY2FsYygke3RoZW1lLnNwYWNpbmcoMSl9ICogMS4yKWBcbn0pKTtcbmNvbnN0IERpdmlkZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBEaXZpZGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlEaXZpZGVyJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYWJzb2x1dGUgPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50ID0gY2hpbGRyZW4gPyAnZGl2JyA6ICdocicsXG4gICAgZmxleEl0ZW0gPSBmYWxzZSxcbiAgICBsaWdodCA9IGZhbHNlLFxuICAgIG9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnLFxuICAgIHJvbGUgPSBjb21wb25lbnQgIT09ICdocicgPyAnc2VwYXJhdG9yJyA6IHVuZGVmaW5lZCxcbiAgICB0ZXh0QWxpZ24gPSAnY2VudGVyJyxcbiAgICB2YXJpYW50ID0gJ2Z1bGxXaWR0aCdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhYnNvbHV0ZSxcbiAgICBjb21wb25lbnQsXG4gICAgZmxleEl0ZW0sXG4gICAgbGlnaHQsXG4gICAgb3JpZW50YXRpb24sXG4gICAgcm9sZSxcbiAgICB0ZXh0QWxpZ24sXG4gICAgdmFyaWFudFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChEaXZpZGVyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByb2xlOiByb2xlLFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPyAvKiNfX1BVUkVfXyovX2pzeChEaXZpZGVyV3JhcHBlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLndyYXBwZXIsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkgOiBudWxsXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGl2aWRlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQWJzb2x1dGVseSBwb3NpdGlvbiB0aGUgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFic29sdXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIHZlcnRpY2FsIGRpdmlkZXIgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IGhlaWdodCB3aGVuIHVzZWQgaW4gZmxleCBjb250YWluZXIuXG4gICAqIChCeSBkZWZhdWx0LCBhIHZlcnRpY2FsIGRpdmlkZXIgd2lsbCBoYXZlIGEgY2FsY3VsYXRlZCBoZWlnaHQgb2YgYDBweGAgaWYgaXQgaXMgdGhlIGNoaWxkIG9mIGEgZmxleCBjb250YWluZXIuKVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZmxleEl0ZW06IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBkaXZpZGVyIHdpbGwgaGF2ZSBhIGxpZ2h0ZXIgY29sb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsaWdodDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgb3JpZW50YXRpb24uXG4gICAqIEBkZWZhdWx0ICdob3Jpem9udGFsJ1xuICAgKi9cbiAgb3JpZW50YXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2hvcml6b250YWwnLCAndmVydGljYWwnXSksXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJvbGU6IFByb3BUeXBlc1xuICAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovXG4gIC5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBhbGlnbm1lbnQuXG4gICAqIEBkZWZhdWx0ICdjZW50ZXInXG4gICAqL1xuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdmdWxsV2lkdGgnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydmdWxsV2lkdGgnLCAnaW5zZXQnLCAnbWlkZGxlJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBEaXZpZGVyOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Hcm91cCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUdyb3VwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Hcm91cCcsIFsncm9vdCcsICdyb3cnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtR3JvdXBDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJyb3dcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9mb3JtR3JvdXBDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHJvd1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290Jywgcm93ICYmICdyb3cnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBGb3JtR3JvdXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtR3JvdXAnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5yb3cgJiYgc3R5bGVzLnJvd107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgZmxleFdyYXA6ICd3cmFwJ1xufSwgb3duZXJTdGF0ZS5yb3cgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93J1xufSkpO1xuLyoqXG4gKiBgRm9ybUdyb3VwYCB3cmFwcyBjb250cm9scyBzdWNoIGFzIGBDaGVja2JveGAgYW5kIGBTd2l0Y2hgLlxuICogSXQgcHJvdmlkZXMgY29tcGFjdCByb3cgbGF5b3V0LlxuICogRm9yIHRoZSBgUmFkaW9gLCB5b3Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBgUmFkaW9Hcm91cGAgY29tcG9uZW50IGluc3RlYWQgb2YgdGhpcyBvbmUuXG4gKi9cblxuY29uc3QgRm9ybUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUdyb3VwKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtR3JvdXAnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgcm93ID0gZmFsc2VcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByb3dcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUdyb3VwUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtR3JvdXAucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogRGlzcGxheSBncm91cCBvZiBlbGVtZW50cyBpbiBhIGNvbXBhY3Qgcm93LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcm93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtR3JvdXA7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEFkb3JubWVudCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRBZG9ybm1lbnRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRBZG9ybm1lbnQnLCBbJ3Jvb3QnLCAnZmlsbGVkJywgJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ3Bvc2l0aW9uU3RhcnQnLCAncG9zaXRpb25FbmQnLCAnZGlzYWJsZVBvaW50ZXJFdmVudHMnLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZVNtYWxsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRBZG9ybm1lbnRDbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVQb2ludGVyRXZlbnRzXCIsIFwiZGlzYWJsZVR5cG9ncmFwaHlcIiwgXCJwb3NpdGlvblwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgaW5wdXRBZG9ybm1lbnRDbGFzc2VzLCB7IGdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEFkb3JubWVudENsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgcG9zaXRpb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wb3NpdGlvbil9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVBvaW50ZXJFdmVudHMgPT09IHRydWUgJiYgc3R5bGVzLmRpc2FibGVQb2ludGVyRXZlbnRzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG59O1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUG9pbnRlckV2ZW50cyxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBwb3NpdGlvbixcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVQb2ludGVyRXZlbnRzICYmICdkaXNhYmxlUG9pbnRlckV2ZW50cycsIHBvc2l0aW9uICYmIGBwb3NpdGlvbiR7Y2FwaXRhbGl6ZShwb3NpdGlvbil9YCwgdmFyaWFudCwgaGlkZGVuTGFiZWwgJiYgJ2hpZGRlbkxhYmVsJywgc2l6ZSAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IElucHV0QWRvcm5tZW50Um9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRBZG9ybm1lbnQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGhlaWdodDogJzAuMDFlbScsXG4gIC8vIEZpeCBJRTExIGZsZXhib3ggYWxpZ25tZW50LiBUbyByZW1vdmUgYXQgc29tZSBwb2ludC5cbiAgbWF4SGVpZ2h0OiAnMmVtJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgLy8gU3R5bGVzIGFwcGxpZWQgdG8gdGhlIHJvb3QgZWxlbWVudCBpZiBgdmFyaWFudD1cImZpbGxlZFwiYC5cbiAgW2AmLiR7aW5wdXRBZG9ybm1lbnRDbGFzc2VzLnBvc2l0aW9uU3RhcnR9Jjpub3QoLiR7aW5wdXRBZG9ybm1lbnRDbGFzc2VzLmhpZGRlbkxhYmVsfSlgXToge1xuICAgIG1hcmdpblRvcDogMTZcbiAgfVxufSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ3N0YXJ0JyAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYHBvc2l0aW9uPVwic3RhcnRcImAuXG4gIG1hcmdpblJpZ2h0OiA4XG59LCBvd25lclN0YXRlLnBvc2l0aW9uID09PSAnZW5kJyAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYHBvc2l0aW9uPVwiZW5kXCJgLlxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLmRpc2FibGVQb2ludGVyRXZlbnRzID09PSB0cnVlICYmIHtcbiAgLy8gU3R5bGVzIGFwcGxpZWQgdG8gdGhlIHJvb3QgZWxlbWVudCBpZiBgZGlzYWJsZVBvaW50ZXJFdmVudHM9e3RydWV9YC5cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59KSk7XG5jb25zdCBJbnB1dEFkb3JubWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QWRvcm5tZW50KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEFkb3JubWVudCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBkaXNhYmxlUG9pbnRlckV2ZW50cyA9IGZhbHNlLFxuICAgIGRpc2FibGVUeXBvZ3JhcGh5ID0gZmFsc2UsXG4gICAgcG9zaXRpb24sXG4gICAgdmFyaWFudDogdmFyaWFudFByb3BcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKSB8fCB7fTtcbiAgbGV0IHZhcmlhbnQgPSB2YXJpYW50UHJvcDtcblxuICBpZiAodmFyaWFudFByb3AgJiYgbXVpRm9ybUNvbnRyb2wudmFyaWFudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodmFyaWFudFByb3AgPT09IG11aUZvcm1Db250cm9sLnZhcmlhbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBUaGUgYElucHV0QWRvcm5tZW50YCB2YXJpYW50IGluZmVycyB0aGUgdmFyaWFudCBwcm9wICcgKyAneW91IGRvIG5vdCBoYXZlIHRvIHByb3ZpZGUgb25lLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtdWlGb3JtQ29udHJvbCAmJiAhdmFyaWFudCkge1xuICAgIHZhcmlhbnQgPSBtdWlGb3JtQ29udHJvbC52YXJpYW50O1xuICB9XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGhpZGRlbkxhYmVsOiBtdWlGb3JtQ29udHJvbC5oaWRkZW5MYWJlbCxcbiAgICBzaXplOiBtdWlGb3JtQ29udHJvbC5zaXplLFxuICAgIGRpc2FibGVQb2ludGVyRXZlbnRzLFxuICAgIHBvc2l0aW9uLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KElucHV0QWRvcm5tZW50Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycgJiYgIWRpc2FibGVUeXBvZ3JhcGh5ID8gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeSwge1xuICAgICAgICBjb2xvcjogXCJ0ZXh0LnNlY29uZGFyeVwiLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pIDogLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbcG9zaXRpb24gPT09ICdzdGFydCcgP1xuICAgICAgICAvKiNfX1BVUkVfXyovXG5cbiAgICAgICAgLyogbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWUgKi9cblxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGFuZ2VyICovXG4gICAgICAgIF9qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgX19odG1sOiAnJiM4MjAzOydcbiAgICAgICAgICB9XG4gICAgICAgIH0pIDogbnVsbCwgY2hpbGRyZW5dXG4gICAgICB9KVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRBZG9ybm1lbnQucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQsIG5vcm1hbGx5IGFuIGBJY29uQnV0dG9uYCBvciBzdHJpbmcuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIERpc2FibGUgcG9pbnRlciBldmVudHMgb24gdGhlIHJvb3QuXG4gICAqIFRoaXMgYWxsb3dzIGZvciB0aGUgY29udGVudCBvZiB0aGUgYWRvcm5tZW50IHRvIGZvY3VzIHRoZSBgaW5wdXRgIG9uIGNsaWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvaW50ZXJFdmVudHM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBjaGlsZHJlbiBpcyBhIHN0cmluZyB0aGVuIGRpc2FibGUgd3JhcHBpbmcgaW4gYSBUeXBvZ3JhcGh5IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUeXBvZ3JhcGh5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIHRoaXMgYWRvcm5tZW50IHNob3VsZCBhcHBlYXIgcmVsYXRpdmUgdG8gdGhlIGBJbnB1dGAuXG4gICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnZW5kJywgJ3N0YXJ0J10pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIE5vdGU6IElmIHlvdSBhcmUgdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCBvciB0aGUgYEZvcm1Db250cm9sYCBjb21wb25lbnRcbiAgICogeW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIG1hbnVhbGx5LlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRBZG9ybm1lbnQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0JywgWydyb290JywgJ3BhZGRpbmcnLCAnZGVuc2UnLCAnc3ViaGVhZGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdENsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlUGFkZGluZ1wiLCBcInN1YmhlYWRlclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkZW5zZSxcbiAgICBzdWJoZWFkZXJcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRlbnNlICYmICdkZW5zZScsIHN1YmhlYWRlciAmJiAnc3ViaGVhZGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0J1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCA9ICd1bCcsXG4gICAgZGVuc2UgPSBmYWxzZSxcbiAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZVxuICB9KSwgW2RlbnNlXSk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlUGFkZGluZ1xuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB2ZXJ0aWNhbCBwYWRkaW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHN1YmhlYWRlciwgbm9ybWFsbHkgYExpc3RTdWJoZWFkZXJgLlxuICAgKi9cbiAgc3ViaGVhZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuXG5jb25zdCBMaXN0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbScsIFsncm9vdCcsICdjb250YWluZXInLCAnZm9jdXNWaXNpYmxlJywgJ2RlbnNlJywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCAnZGlzYWJsZWQnLCAnZGl2aWRlcicsICdndXR0ZXJzJywgJ3BhZGRpbmcnLCAnYnV0dG9uJywgJ3NlY29uZGFyeUFjdGlvbicsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQ2xhc3NlczsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtQnV0dG9uJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbUJ1dHRvbicsIFsncm9vdCcsICdmb2N1c1Zpc2libGUnLCAnZGVuc2UnLCAnYWxpZ25JdGVtc0ZsZXhTdGFydCcsICdkaXNhYmxlZCcsICdkaXZpZGVyJywgJ2d1dHRlcnMnLCAnc2VsZWN0ZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUJ1dHRvbkNsYXNzZXM7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJywgWydyb290JywgJ2Rpc2FibGVHdXR0ZXJzJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4uL0xpc3QvTGlzdENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0SXRlbVNlY29uZGFyeUFjdGlvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVHdXR0ZXJzICYmICdkaXNhYmxlR3V0dGVycyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25DbGFzc2VzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZGlzYWJsZUd1dHRlcnNdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMTYsXG4gIHRvcDogJzUwJScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknXG59LCBvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgcmlnaHQ6IDBcbn0pKTtcbi8qKlxuICogTXVzdCBiZSB1c2VkIGFzIHRoZSBsYXN0IGNoaWxkIG9mIExpc3RJdGVtIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuICovXG5cbmNvbnN0IExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChMaXN0Q29udGV4dCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVHdXR0ZXJzOiBjb250ZXh0LmRpc2FibGVHdXR0ZXJzXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbi5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCwgbm9ybWFsbHkgYW4gYEljb25CdXR0b25gIG9yIHNlbGVjdGlvbiBjb250cm9sLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24ubXVpTmFtZSA9ICdMaXN0SXRlbVNlY29uZGFyeUFjdGlvbic7XG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbjsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImFsaWduSXRlbXNcIiwgXCJhdXRvRm9jdXNcIiwgXCJidXR0b25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJDb250YWluZXJDb21wb25lbnRcIiwgXCJDb250YWluZXJQcm9wc1wiLCBcImRlbnNlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwiZGl2aWRlclwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInNlY29uZGFyeUFjdGlvblwiLCBcInNlbGVjdGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIGlzSG9zdENvbXBvbmVudCB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4uL0xpc3QvTGlzdENvbnRleHQnO1xuaW1wb3J0IGxpc3RJdGVtQ2xhc3NlcywgeyBnZXRMaXN0SXRlbVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdEl0ZW1DbGFzc2VzJztcbmltcG9ydCB7IGxpc3RJdGVtQnV0dG9uQ2xhc3NlcyB9IGZyb20gJy4uL0xpc3RJdGVtQnV0dG9uJztcbmltcG9ydCBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbiBmcm9tICcuLi9MaXN0SXRlbVNlY29uZGFyeUFjdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IG92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgc3R5bGVzLmFsaWduSXRlbXNGbGV4U3RhcnQsIG93bmVyU3RhdGUuZGl2aWRlciAmJiBzdHlsZXMuZGl2aWRlciwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmd1dHRlcnMsICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHN0eWxlcy5wYWRkaW5nLCBvd25lclN0YXRlLmJ1dHRvbiAmJiBzdHlsZXMuYnV0dG9uLCBvd25lclN0YXRlLmhhc1NlY29uZGFyeUFjdGlvbiAmJiBzdHlsZXMuc2Vjb25kYXJ5QWN0aW9uXTtcbn07XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGJ1dHRvbixcbiAgICBjbGFzc2VzLFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRpdmlkZXIsXG4gICAgaGFzU2Vjb25kYXJ5QWN0aW9uLFxuICAgIHNlbGVjdGVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCAhZGlzYWJsZVBhZGRpbmcgJiYgJ3BhZGRpbmcnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYnV0dG9uICYmICdidXR0b24nLCBhbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCBoYXNTZWNvbmRhcnlBY3Rpb24gJiYgJ3NlY29uZGFyeUFjdGlvbicsIHNlbGVjdGVkICYmICdzZWxlY3RlZCddLFxuICAgIGNvbnRhaW5lcjogWydjb250YWluZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RJdGVtVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBMaXN0SXRlbVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUxpc3RJdGVtJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB0ZXh0QWxpZ246ICdsZWZ0J1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLmRlbnNlICYmIHtcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogMTYsXG4gIHBhZGRpbmdSaWdodDogMTZcbn0sICEhb3duZXJTdGF0ZS5zZWNvbmRhcnlBY3Rpb24gJiYge1xuICAvLyBBZGQgc29tZSBzcGFjZSB0byBhdm9pZCBjb2xsaXNpb24gYXMgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYFxuICAvLyBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQuXG4gIHBhZGRpbmdSaWdodDogNDhcbn0pLCAhIW93bmVyU3RhdGUuc2Vjb25kYXJ5QWN0aW9uICYmIHtcbiAgW2AmID4gLiR7bGlzdEl0ZW1CdXR0b25DbGFzc2VzLnJvb3R9YF06IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDQ4XG4gIH1cbn0sIHtcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZm9jdXNcbiAgfSxcbiAgW2AmLiR7bGlzdEl0ZW1DbGFzc2VzLnNlbGVjdGVkfWBdOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHtsaXN0SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHtsaXN0SXRlbUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZE9wYWNpdHlcbiAgfVxufSwgb3duZXJTdGF0ZS5hbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYge1xuICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCdcbn0sIG93bmVyU3RhdGUuZGl2aWRlciAmJiB7XG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwgb3duZXJTdGF0ZS5idXR0b24gJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JhY2tncm91bmQtY29sb3InLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0XG4gIH0pLFxuICAnJjpob3Zlcic6IHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXIsXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQ2xhc3Nlcy5zZWxlY3RlZH06aG92ZXJgXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSArIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkpXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmhhc1NlY29uZGFyeUFjdGlvbiAmJiB7XG4gIC8vIEFkZCBzb21lIHNwYWNlIHRvIGF2b2lkIGNvbGxpc2lvbiBhcyBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gXG4gIC8vIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC5cbiAgcGFkZGluZ1JpZ2h0OiA0OFxufSkpO1xuY29uc3QgTGlzdEl0ZW1Db250YWluZXIgPSBzdHlsZWQoJ2xpJywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW0nLFxuICBzbG90OiAnQ29udGFpbmVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuY29udGFpbmVyXG59KSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59KTtcbi8qKlxuICogVXNlcyBhbiBhZGRpdGlvbmFsIGNvbnRhaW5lciBjb21wb25lbnQgaWYgYExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uYCBpcyB0aGUgbGFzdCBjaGlsZC5cbiAqL1xuXG5jb25zdCBMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3RJdGVtKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbSdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFsaWduSXRlbXMgPSAnY2VudGVyJyxcbiAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBidXR0b24gPSBmYWxzZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudFByb3AsXG4gICAgY29tcG9uZW50cyA9IHt9LFxuICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgIENvbnRhaW5lckNvbXBvbmVudCA9ICdsaScsXG4gICAgQ29udGFpbmVyUHJvcHM6IHtcbiAgICAgIGNsYXNzTmFtZTogQ29udGFpbmVyQ2xhc3NOYW1lXG4gICAgfSA9IHt9LFxuICAgIGRlbnNlID0gZmFsc2UsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBkaXNhYmxlR3V0dGVycyA9IGZhbHNlLFxuICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgZGl2aWRlciA9IGZhbHNlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBzZWNvbmRhcnlBY3Rpb24sXG4gICAgc2VsZWN0ZWQgPSBmYWxzZVxuICB9ID0gcHJvcHMsXG4gICAgICAgIENvbnRhaW5lclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuQ29udGFpbmVyUHJvcHMsIF9leGNsdWRlZCksXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0ge1xuICAgIGRlbnNlOiBkZW5zZSB8fCBjb250ZXh0LmRlbnNlIHx8IGZhbHNlLFxuICAgIGFsaWduSXRlbXMsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfTtcbiAgY29uc3QgbGlzdEl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAobGlzdEl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICBsaXN0SXRlbVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBVbmFibGUgdG8gc2V0IGZvY3VzIHRvIGEgTGlzdEl0ZW0gd2hvc2UgY29tcG9uZW50IGhhcyBub3QgYmVlbiByZW5kZXJlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgY29uc3QgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuUHJvcCk7IC8vIHY0IGltcGxlbWVudGF0aW9uLCBkZXByZWNhdGVkIGluIHY1LCB3aWxsIGJlIHJlbW92ZWQgaW4gdjZcblxuICBjb25zdCBoYXNTZWNvbmRhcnlBY3Rpb24gPSBjaGlsZHJlbi5sZW5ndGggJiYgaXNNdWlFbGVtZW50KGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBbJ0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ10pO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGF1dG9Gb2N1cyxcbiAgICBidXR0b24sXG4gICAgZGVuc2U6IGNoaWxkQ29udGV4dC5kZW5zZSxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkaXZpZGVyLFxuICAgIGhhc1NlY29uZGFyeUFjdGlvbixcbiAgICBzZWxlY3RlZFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdEl0ZW1SZWYsIHJlZik7XG4gIGNvbnN0IFJvb3QgPSBjb21wb25lbnRzLlJvb3QgfHwgTGlzdEl0ZW1Sb290O1xuICBjb25zdCByb290UHJvcHMgPSBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcblxuICBjb25zdCBjb21wb25lbnRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCByb290UHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkXG4gIH0sIG90aGVyKTtcblxuICBsZXQgQ29tcG9uZW50ID0gY29tcG9uZW50UHJvcCB8fCAnbGknO1xuXG4gIGlmIChidXR0b24pIHtcbiAgICBjb21wb25lbnRQcm9wcy5jb21wb25lbnQgPSBjb21wb25lbnRQcm9wIHx8ICdkaXYnO1xuICAgIGNvbXBvbmVudFByb3BzLmZvY3VzVmlzaWJsZUNsYXNzTmFtZSA9IGNsc3gobGlzdEl0ZW1DbGFzc2VzLmZvY3VzVmlzaWJsZSwgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKTtcbiAgICBDb21wb25lbnQgPSBCdXR0b25CYXNlO1xuICB9IC8vIHY0IGltcGxlbWVudGF0aW9uLCBkZXByZWNhdGVkIGluIHY1LCB3aWxsIGJlIHJlbW92ZWQgaW4gdjZcblxuXG4gIGlmIChoYXNTZWNvbmRhcnlBY3Rpb24pIHtcbiAgICAvLyBVc2UgZGl2IGJ5IGRlZmF1bHQuXG4gICAgQ29tcG9uZW50ID0gIWNvbXBvbmVudFByb3BzLmNvbXBvbmVudCAmJiAhY29tcG9uZW50UHJvcCA/ICdkaXYnIDogQ29tcG9uZW50OyAvLyBBdm9pZCBuZXN0aW5nIG9mIGxpID4gbGkuXG5cbiAgICBpZiAoQ29udGFpbmVyQ29tcG9uZW50ID09PSAnbGknKSB7XG4gICAgICBpZiAoQ29tcG9uZW50ID09PSAnbGknKSB7XG4gICAgICAgIENvbXBvbmVudCA9ICdkaXYnO1xuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRQcm9wcy5jb21wb25lbnQgPT09ICdsaScpIHtcbiAgICAgICAgY29tcG9uZW50UHJvcHMuY29tcG9uZW50ID0gJ2Rpdic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0SXRlbUNvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgICAgICBhczogQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5jb250YWluZXIsIENvbnRhaW5lckNsYXNzTmFtZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgICB9LCBDb250YWluZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgICAgIGFzOiBDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgICAgICB9LCBjb21wb25lbnRQcm9wcywge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KSksIGNoaWxkcmVuLnBvcCgpXVxuICAgICAgfSkpXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgICAgYXM6IENvbXBvbmVudCxcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIGNvbXBvbmVudFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBzZWNvbmRhcnlBY3Rpb24gJiYgLyojX19QVVJFX18qL19qc3goTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24sIHtcbiAgICAgICAgY2hpbGRyZW46IHNlY29uZGFyeUFjdGlvblxuICAgICAgfSldXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0SXRlbS5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGFsaWduLWl0ZW1zYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgJ2NlbnRlcidcbiAgICovXG4gIGFsaWduSXRlbXM6IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdmbGV4LXN0YXJ0J10pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGRlcHJlY2F0ZWQgY2hlY2tvdXQgW0xpc3RJdGVtQnV0dG9uXSgvYXBpL2xpc3QtaXRlbS1idXR0b24vKSBpbnN0ZWFkXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgYSBidXR0b24gKHVzaW5nIGBCdXR0b25CYXNlYCkuIFByb3BzIGludGVuZGVkXG4gICAqIGZvciBgQnV0dG9uQmFzZWAgY2FuIHRoZW4gYmUgYXBwbGllZCB0byBgTGlzdEl0ZW1gLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBjaGVja291dCBbTGlzdEl0ZW1CdXR0b25dKC9hcGkvbGlzdC1pdGVtLWJ1dHRvbi8pIGluc3RlYWRcbiAgICovXG4gIGJ1dHRvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQgaWYgYSBgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb25gIGlzIHVzZWQgaXQgbXVzdFxuICAgKiBiZSB0aGUgbGFzdCBjaGlsZC5cbiAgICovXG4gIGNoaWxkcmVuOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMubm9kZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbik7IC8vIFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZpbmRMYXN0SW5kZXgoaXNMaXN0SXRlbVNlY29uZGFyeUFjdGlvbilcblxuICAgIGxldCBzZWNvbmRhcnlBY3Rpb25JbmRleCA9IC0xO1xuXG4gICAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgICBpZiAoaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0xpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uJ10pKSB7XG4gICAgICAgIHNlY29uZGFyeUFjdGlvbkluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyAgaXMgTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24gdGhlIGxhc3QgY2hpbGQgb2YgTGlzdEl0ZW1cblxuXG4gICAgaWYgKHNlY29uZGFyeUFjdGlvbkluZGV4ICE9PSAtMSAmJiBzZWNvbmRhcnlBY3Rpb25JbmRleCAhPT0gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgdXNlZCBhbiBlbGVtZW50IGFmdGVyIExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uLiAnICsgJ0ZvciBMaXN0SXRlbSB0byBkZXRlY3QgdGhhdCBpdCBoYXMgYSBzZWNvbmRhcnkgYWN0aW9uICcgKyAneW91IG11c3QgcGFzcyBpdCBhcyB0aGUgbGFzdCBjaGlsZCB0byBMaXN0SXRlbS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIElucHV0QmFzZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgSW5wdXQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgY29tcG9uZW50IHVzZWQgd2hlbiBhIGBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbmAgaXMgdGhlIGxhc3QgY2hpbGQuXG4gICAqIEBkZWZhdWx0ICdsaSdcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIENvbnRhaW5lckNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG5cbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lciBjb21wb25lbnQgaWYgdXNlZC5cbiAgICogQGRlZmF1bHQge31cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIENvbnRhaW5lclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IExpc3QgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWxsIHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIDFweCBsaWdodCBib3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gZGlzcGxheSBhdCB0aGUgZW5kIG9mIExpc3RJdGVtLlxuICAgKi9cbiAgc2Vjb25kYXJ5QWN0aW9uOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVXNlIHRvIGFwcGx5IHNlbGVjdGVkIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIGNoZWNrb3V0IFtMaXN0SXRlbUJ1dHRvbl0oL2FwaS9saXN0LWl0ZW0tYnV0dG9uLykgaW5zdGVhZFxuICAgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3RJdGVtOyIsImltcG9ydCB7IGdlbmVyYXRlVXRpbGl0eUNsYXNzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUF2YXRhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1BdmF0YXInLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtQXZhdGFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtQXZhdGFyJywgWydyb290JywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUF2YXRhckNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRMaXN0SXRlbUF2YXRhclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdEl0ZW1BdmF0YXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiAnYWxpZ25JdGVtc0ZsZXhTdGFydCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1BdmF0YXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgTGlzdEl0ZW1BdmF0YXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlMaXN0SXRlbUF2YXRhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiBzdHlsZXMuYWxpZ25JdGVtc0ZsZXhTdGFydF07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWluV2lkdGg6IDU2LFxuICBmbGV4U2hyaW5rOiAwXG59LCBvd25lclN0YXRlLmFsaWduSXRlbXMgPT09ICdmbGV4LXN0YXJ0JyAmJiB7XG4gIG1hcmdpblRvcDogOFxufSkpO1xuLyoqXG4gKiBBIHNpbXBsZSB3cmFwcGVyIHRvIGFwcGx5IGBMaXN0YCBzdHlsZXMgdG8gYW4gYEF2YXRhcmAuXG4gKi9cblxuY29uc3QgTGlzdEl0ZW1BdmF0YXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0SXRlbUF2YXRhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdEl0ZW1BdmF0YXInXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcblxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ25JdGVtczogY29udGV4dC5hbGlnbkl0ZW1zXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RJdGVtQXZhdGFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0SXRlbUF2YXRhci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCwgbm9ybWFsbHkgYW4gYEF2YXRhcmAuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbUF2YXRhcjsiLCJpbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdEl0ZW1UZXh0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0SXRlbVRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0SXRlbVRleHQnLCBbJ3Jvb3QnLCAnbXVsdGlsaW5lJywgJ2RlbnNlJywgJ2luc2V0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdEl0ZW1UZXh0Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcImluc2V0XCIsIFwicHJpbWFyeVwiLCBcInByaW1hcnlUeXBvZ3JhcGh5UHJvcHNcIiwgXCJzZWNvbmRhcnlcIiwgXCJzZWNvbmRhcnlUeXBvZ3JhcGh5UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuLi9MaXN0L0xpc3RDb250ZXh0JztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgbGlzdEl0ZW1UZXh0Q2xhc3NlcywgeyBnZXRMaXN0SXRlbVRleHRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RJdGVtVGV4dENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW5zZXQsXG4gICAgcHJpbWFyeSxcbiAgICBzZWNvbmRhcnksXG4gICAgZGVuc2VcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGluc2V0ICYmICdpbnNldCcsIGRlbnNlICYmICdkZW5zZScsIHByaW1hcnkgJiYgc2Vjb25kYXJ5ICYmICdtdWx0aWxpbmUnXSxcbiAgICBwcmltYXJ5OiBbJ3ByaW1hcnknXSxcbiAgICBzZWNvbmRhcnk6IFsnc2Vjb25kYXJ5J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0SXRlbVRleHRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgTGlzdEl0ZW1UZXh0Um9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTGlzdEl0ZW1UZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMucHJpbWFyeX1gXTogc3R5bGVzLnByaW1hcnlcbiAgICB9LCB7XG4gICAgICBbYCYgLiR7bGlzdEl0ZW1UZXh0Q2xhc3Nlcy5zZWNvbmRhcnl9YF06IHN0eWxlcy5zZWNvbmRhcnlcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5pbnNldCAmJiBzdHlsZXMuaW5zZXQsIG93bmVyU3RhdGUucHJpbWFyeSAmJiBvd25lclN0YXRlLnNlY29uZGFyeSAmJiBzdHlsZXMubXVsdGlsaW5lLCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZmxleDogJzEgMSBhdXRvJyxcbiAgbWluV2lkdGg6IDAsXG4gIG1hcmdpblRvcDogNCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLnByaW1hcnkgJiYgb3duZXJTdGF0ZS5zZWNvbmRhcnkgJiYge1xuICBtYXJnaW5Ub3A6IDYsXG4gIG1hcmdpbkJvdHRvbTogNlxufSwgb3duZXJTdGF0ZS5pbnNldCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiA1NlxufSkpO1xuY29uc3QgTGlzdEl0ZW1UZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdEl0ZW1UZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0SXRlbVRleHQnXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgZGlzYWJsZVR5cG9ncmFwaHkgPSBmYWxzZSxcbiAgICBpbnNldCA9IGZhbHNlLFxuICAgIHByaW1hcnk6IHByaW1hcnlQcm9wLFxuICAgIHByaW1hcnlUeXBvZ3JhcGh5UHJvcHMsXG4gICAgc2Vjb25kYXJ5OiBzZWNvbmRhcnlQcm9wLFxuICAgIHNlY29uZGFyeVR5cG9ncmFwaHlQcm9wc1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qge1xuICAgIGRlbnNlXG4gIH0gPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgbGV0IHByaW1hcnkgPSBwcmltYXJ5UHJvcCAhPSBudWxsID8gcHJpbWFyeVByb3AgOiBjaGlsZHJlbjtcbiAgbGV0IHNlY29uZGFyeSA9IHNlY29uZGFyeVByb3A7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVUeXBvZ3JhcGh5LFxuICAgIGluc2V0LFxuICAgIHByaW1hcnk6ICEhcHJpbWFyeSxcbiAgICBzZWNvbmRhcnk6ICEhc2Vjb25kYXJ5LFxuICAgIGRlbnNlXG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICBpZiAocHJpbWFyeSAhPSBudWxsICYmIHByaW1hcnkudHlwZSAhPT0gVHlwb2dyYXBoeSAmJiAhZGlzYWJsZVR5cG9ncmFwaHkpIHtcbiAgICBwcmltYXJ5ID0gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeSwgX2V4dGVuZHMoe1xuICAgICAgdmFyaWFudDogZGVuc2UgPyAnYm9keTInIDogJ2JvZHkxJyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5wcmltYXJ5LFxuICAgICAgY29tcG9uZW50OiBcInNwYW5cIixcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxuICAgIH0sIHByaW1hcnlUeXBvZ3JhcGh5UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwcmltYXJ5XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKHNlY29uZGFyeSAhPSBudWxsICYmIHNlY29uZGFyeS50eXBlICE9PSBUeXBvZ3JhcGh5ICYmICFkaXNhYmxlVHlwb2dyYXBoeSkge1xuICAgIHNlY29uZGFyeSA9IC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHksIF9leHRlbmRzKHtcbiAgICAgIHZhcmlhbnQ6IFwiYm9keTJcIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zZWNvbmRhcnksXG4gICAgICBjb2xvcjogXCJ0ZXh0LnNlY29uZGFyeVwiLFxuICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgfSwgc2Vjb25kYXJ5VHlwb2dyYXBoeVByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogc2Vjb25kYXJ5XG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhMaXN0SXRlbVRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtwcmltYXJ5LCBzZWNvbmRhcnldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdEl0ZW1UZXh0LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgdGhlIGBwcmltYXJ5YCBwcm9wLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNoaWxkcmVuIHdvbid0IGJlIHdyYXBwZWQgYnkgYSBUeXBvZ3JhcGh5IGNvbXBvbmVudC5cbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHJlbmRlciBhbiBhbHRlcm5hdGl2ZSBUeXBvZ3JhcGh5IHZhcmlhbnQgYnkgd3JhcHBpbmdcbiAgICogdGhlIGBjaGlsZHJlbmAgKG9yIGBwcmltYXJ5YCkgdGV4dCwgYW5kIG9wdGlvbmFsIGBzZWNvbmRhcnlgIHRleHRcbiAgICogd2l0aCB0aGUgVHlwb2dyYXBoeSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVHlwb2dyYXBoeTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNoaWxkcmVuIGFyZSBpbmRlbnRlZC5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBsZWZ0IGF2YXRhciBvciBsZWZ0IGljb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbnNldDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBtYWluIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIHByaW1hcnk6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGVzZSBwcm9wcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgcHJpbWFyeSB0eXBvZ3JhcGh5IGNvbXBvbmVudFxuICAgKiAoYXMgbG9uZyBhcyBkaXNhYmxlVHlwb2dyYXBoeSBpcyBub3QgYHRydWVgKS5cbiAgICovXG4gIHByaW1hcnlUeXBvZ3JhcGh5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmRhcnkgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgc2Vjb25kYXJ5OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogVGhlc2UgcHJvcHMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNlY29uZGFyeSB0eXBvZ3JhcGh5IGNvbXBvbmVudFxuICAgKiAoYXMgbG9uZyBhcyBkaXNhYmxlVHlwb2dyYXBoeSBpcyBub3QgYHRydWVgKS5cbiAgICovXG4gIHNlY29uZGFyeVR5cG9ncmFwaHlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbVRleHQ7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7IC8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IGdldE92ZXJsYXlBbHBoYSA9IGVsZXZhdGlvbiA9PiB7XG4gIGxldCBhbHBoYVZhbHVlO1xuXG4gIGlmIChlbGV2YXRpb24gPCAxKSB7XG4gICAgYWxwaGFWYWx1ZSA9IDUuMTE5MTYgKiBlbGV2YXRpb24gKiogMjtcbiAgfSBlbHNlIHtcbiAgICBhbHBoYVZhbHVlID0gNC41ICogTWF0aC5sb2coZWxldmF0aW9uICsgMSkgKyAyO1xuICB9XG5cbiAgcmV0dXJuIChhbHBoYVZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpO1xufTtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIHNxdWFyZSxcbiAgICBlbGV2YXRpb24sXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCAhc3F1YXJlICYmICdyb3VuZGVkJywgdmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgYGVsZXZhdGlvbiR7ZWxldmF0aW9ufWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcblxuY29uc3QgUGFwZXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlQYXBlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHN0eWxlcy5yb3VuZGVkLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIHN0eWxlc1tgZWxldmF0aW9uJHtvd25lclN0YXRlLmVsZXZhdGlvbn1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm94LXNoYWRvdycpXG59LCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYge1xuICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5kaXZpZGVyfWBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgX2V4dGVuZHMoe1xuICBib3hTaGFkb3c6IHRoZW1lLnNoYWRvd3Nbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG59LCB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudCgke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9LCAke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9KWBcbn0pKSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICBlbGV2YXRpb24gPSAxLFxuICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG5cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcblxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnZWxldmF0aW9uJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZWxldmF0aW9uJywgJ291dGxpbmVkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQYXBlcjsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgZXhhY3RQcm9wLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfdXNlRXZlbnRDYWxsYmFjayBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQG11aS91dGlscyc7IC8vIFRPRE86IHJldHVybiBgRXZlbnRIYW5kbGVyTmFtZSBleHRlbmRzIGBvbiR7aW5mZXIgRXZlbnROYW1lfWAgPyBMb3dlcmNhc2U8RXZlbnROYW1lPiA6IG5ldmVyYCBvbmNlIGdlbmVyYXRlUHJvcFR5cGVzIHJ1bnMgd2l0aCBUUyA0LjFcblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuZnVuY3Rpb24gbWFwRXZlbnRQcm9wVG9FdmVudChldmVudFByb3ApIHtcbiAgcmV0dXJuIGV2ZW50UHJvcC5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gY2xpY2tlZFJvb3RTY3JvbGxiYXIoZXZlbnQsIGRvYykge1xuICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA8IGV2ZW50LmNsaWVudFggfHwgZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPCBldmVudC5jbGllbnRZO1xufVxuXG4vKipcbiAqIExpc3RlbiBmb3IgY2xpY2sgZXZlbnRzIHRoYXQgb2NjdXIgc29tZXdoZXJlIGluIHRoZSBkb2N1bWVudCwgb3V0c2lkZSBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBuZWVkIHRvIGhpZGUgYSBtZW51IHdoZW4gcGVvcGxlIGNsaWNrIGFueXdoZXJlIGVsc2Ugb24geW91ciBwYWdlLlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW0NsaWNrIEF3YXkgTGlzdGVuZXJdKGh0dHBzOi8vbXVpLmNvbS9jb21wb25lbnRzL2NsaWNrLWF3YXktbGlzdGVuZXIvKVxuICogLSBbTWVudXNdKGh0dHBzOi8vbXVpLmNvbS9jb21wb25lbnRzL21lbnVzLylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbQ2xpY2tBd2F5TGlzdGVuZXIgQVBJXShodHRwczovL211aS5jb20vYXBpL2NsaWNrLWF3YXktbGlzdGVuZXIvKVxuICovXG5mdW5jdGlvbiBDbGlja0F3YXlMaXN0ZW5lcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZVJlYWN0VHJlZSA9IGZhbHNlLFxuICAgIG1vdXNlRXZlbnQgPSAnb25DbGljaycsXG4gICAgb25DbGlja0F3YXksXG4gICAgdG91Y2hFdmVudCA9ICdvblRvdWNoRW5kJ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vdmVkUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgYWN0aXZhdGVkUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc3ludGhldGljRXZlbnRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoaXMgY29tcG9uZW50IGlzIG5vdCBcImFjdGl2YXRlZFwiIHN5bmNocm9ub3VzbHkuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDA3NFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgYWN0aXZhdGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH0sIDApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmF0ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZiggLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIHVwc3RyZWFtIGZpeFxuICBjaGlsZHJlbi5yZWYsIG5vZGVSZWYpOyAvLyBUaGUgaGFuZGxlciBkb2Vzbid0IHRha2UgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCBpbnRvIGFjY291bnQ6XG4gIC8vXG4gIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gIC8vIGNsaWNraW5nIGEgY2hlY2tib3ggdG8gY2hlY2sgaXQsIGhpdHRpbmcgYSBidXR0b24gdG8gc3VibWl0IGEgZm9ybSxcbiAgLy8gYW5kIGhpdHRpbmcgbGVmdCBhcnJvdyB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gYSB0ZXh0IGlucHV0IGV0Yy5cbiAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cblxuICBjb25zdCBoYW5kbGVDbGlja0F3YXkgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBHaXZlbiBkZXZlbG9wZXJzIGNhbiBzdG9wIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgc3ludGhldGljIGV2ZW50LFxuICAgIC8vIHdlIGNhbiBvbmx5IGJlIGNvbmZpZGVudCB3aXRoIGEgcG9zaXRpdmUgdmFsdWUuXG4gICAgY29uc3QgaW5zaWRlUmVhY3RUcmVlID0gc3ludGhldGljRXZlbnRSZWYuY3VycmVudDtcbiAgICBzeW50aGV0aWNFdmVudFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChub2RlUmVmLmN1cnJlbnQpOyAvLyAxLiBJRTExIHN1cHBvcnQsIHdoaWNoIHRyaWdnZXIgdGhlIGhhbmRsZUNsaWNrQXdheSBldmVuIGFmdGVyIHRoZSB1bmJpbmRcbiAgICAvLyAyLiBUaGUgY2hpbGQgbWlnaHQgcmVuZGVyIG51bGwuXG4gICAgLy8gMy4gQmVoYXZlIGxpa2UgYSBibHVyIGxpc3RlbmVyLlxuXG4gICAgaWYgKCFhY3RpdmF0ZWRSZWYuY3VycmVudCB8fCAhbm9kZVJlZi5jdXJyZW50IHx8ICdjbGllbnRYJyBpbiBldmVudCAmJiBjbGlja2VkUm9vdFNjcm9sbGJhcihldmVudCwgZG9jKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRG8gbm90IGFjdCBpZiB1c2VyIHBlcmZvcm1lZCB0b3VjaG1vdmVcblxuXG4gICAgaWYgKG1vdmVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1vdmVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaW5zaWRlRE9NOyAvLyBJZiBub3QgZW5vdWdoLCBjYW4gdXNlIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWV0ZXJIb2x2b2V0L2V2ZW50LXByb3BhZ2F0aW9uLXBhdGgvYmxvYi9tYXN0ZXIvcHJvcGFnYXRpb25QYXRoLmpzXG5cbiAgICBpZiAoZXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgICBpbnNpZGVET00gPSBldmVudC5jb21wb3NlZFBhdGgoKS5pbmRleE9mKG5vZGVSZWYuY3VycmVudCkgPiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zaWRlRE9NID0gIWRvYy5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoIC8vIEB0cy1leHBlY3QtZXJyb3IgcmV0dXJucyBgZmFsc2VgIGFzIGludGVuZGVkIHdoZW4gbm90IGRpc3BhdGNoZWQgZnJvbSBhIE5vZGVcbiAgICAgIGV2ZW50LnRhcmdldCkgfHwgbm9kZVJlZi5jdXJyZW50LmNvbnRhaW5zKCAvLyBAdHMtZXhwZWN0LWVycm9yIHJldHVybnMgYGZhbHNlYCBhcyBpbnRlbmRlZCB3aGVuIG5vdCBkaXNwYXRjaGVkIGZyb20gYSBOb2RlXG4gICAgICBldmVudC50YXJnZXQpO1xuICAgIH1cblxuICAgIGlmICghaW5zaWRlRE9NICYmIChkaXNhYmxlUmVhY3RUcmVlIHx8ICFpbnNpZGVSZWFjdFRyZWUpKSB7XG4gICAgICBvbkNsaWNrQXdheShldmVudCk7XG4gICAgfVxuICB9KTsgLy8gS2VlcCB0cmFjayBvZiBtb3VzZS90b3VjaCBldmVudHMgdGhhdCBidWJibGVkIHVwIHRocm91Z2ggdGhlIHBvcnRhbC5cblxuICBjb25zdCBjcmVhdGVIYW5kbGVTeW50aGV0aWMgPSBoYW5kbGVyTmFtZSA9PiBldmVudCA9PiB7XG4gICAgc3ludGhldGljRXZlbnRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgY29uc3QgY2hpbGRyZW5Qcm9wc0hhbmRsZXIgPSBjaGlsZHJlbi5wcm9wc1toYW5kbGVyTmFtZV07XG5cbiAgICBpZiAoY2hpbGRyZW5Qcm9wc0hhbmRsZXIpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHNIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICByZWY6IGhhbmRsZVJlZlxuICB9O1xuXG4gIGlmICh0b3VjaEV2ZW50ICE9PSBmYWxzZSkge1xuICAgIGNoaWxkcmVuUHJvcHNbdG91Y2hFdmVudF0gPSBjcmVhdGVIYW5kbGVTeW50aGV0aWModG91Y2hFdmVudCk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0b3VjaEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgbWFwcGVkVG91Y2hFdmVudCA9IG1hcEV2ZW50UHJvcFRvRXZlbnQodG91Y2hFdmVudCk7XG4gICAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KG5vZGVSZWYuY3VycmVudCk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9ICgpID0+IHtcbiAgICAgICAgbW92ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihtYXBwZWRUb3VjaEV2ZW50LCBoYW5kbGVDbGlja0F3YXkpO1xuICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYXBwZWRUb3VjaEV2ZW50LCBoYW5kbGVDbGlja0F3YXkpO1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2hhbmRsZUNsaWNrQXdheSwgdG91Y2hFdmVudF0pO1xuXG4gIGlmIChtb3VzZUV2ZW50ICE9PSBmYWxzZSkge1xuICAgIGNoaWxkcmVuUHJvcHNbbW91c2VFdmVudF0gPSBjcmVhdGVIYW5kbGVTeW50aGV0aWMobW91c2VFdmVudCk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb3VzZUV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgbWFwcGVkTW91c2VFdmVudCA9IG1hcEV2ZW50UHJvcFRvRXZlbnQobW91c2VFdmVudCk7XG4gICAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KG5vZGVSZWYuY3VycmVudCk7XG4gICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihtYXBwZWRNb3VzZUV2ZW50LCBoYW5kbGVDbGlja0F3YXkpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIobWFwcGVkTW91c2VFdmVudCwgaGFuZGxlQ2xpY2tBd2F5KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2hhbmRsZUNsaWNrQXdheSwgbW91c2VFdmVudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRyZW5Qcm9wcylcbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENsaWNrQXdheUxpc3RlbmVyLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgd3JhcHBlZCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgUmVhY3QgdHJlZSBpcyBpZ25vcmVkIGFuZCBvbmx5IHRoZSBET00gdHJlZSBpcyBjb25zaWRlcmVkLlxuICAgKiBUaGlzIHByb3AgY2hhbmdlcyBob3cgcG9ydGFsZWQgZWxlbWVudHMgYXJlIGhhbmRsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVhY3RUcmVlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG1vdXNlIGV2ZW50IHRvIGxpc3RlbiB0by4gWW91IGNhbiBkaXNhYmxlIHRoZSBsaXN0ZW5lciBieSBwcm92aWRpbmcgYGZhbHNlYC5cbiAgICogQGRlZmF1bHQgJ29uQ2xpY2snXG4gICAqL1xuICBtb3VzZUV2ZW50OiBQcm9wVHlwZXMub25lT2YoWydvbkNsaWNrJywgJ29uTW91c2VEb3duJywgJ29uTW91c2VVcCcsIGZhbHNlXSksXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBcImNsaWNrIGF3YXlcIiBldmVudCBpcyBkZXRlY3RlZC5cbiAgICovXG4gIG9uQ2xpY2tBd2F5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBUaGUgdG91Y2ggZXZlbnQgdG8gbGlzdGVuIHRvLiBZb3UgY2FuIGRpc2FibGUgdGhlIGxpc3RlbmVyIGJ5IHByb3ZpZGluZyBgZmFsc2VgLlxuICAgKiBAZGVmYXVsdCAnb25Ub3VjaEVuZCdcbiAgICovXG4gIHRvdWNoRXZlbnQ6IFByb3BUeXBlcy5vbmVPZihbJ29uVG91Y2hFbmQnLCAnb25Ub3VjaFN0YXJ0JywgZmFsc2VdKVxufSA6IHZvaWQgMDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIENsaWNrQXdheUxpc3RlbmVyWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKENsaWNrQXdheUxpc3RlbmVyLnByb3BUeXBlcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsaWNrQXdheUxpc3RlbmVyOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IHJlZmxvdywgZ2V0VHJhbnNpdGlvblByb3BzIH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMSlcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiAnbm9uZSdcbiAgfVxufTtcbi8qKlxuICogVGhlIEdyb3cgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbVG9vbHRpcF0oL2NvbXBvbmVudHMvdG9vbHRpcHMvKSBhbmRcbiAqIFtQb3BvdmVyXSgvY29tcG9uZW50cy9wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cblxuY29uc3QgR3JvdyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyb3cocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgYXBwZWFyID0gdHJ1ZSxcbiAgICBjaGlsZHJlbixcbiAgICBlYXNpbmcsXG4gICAgaW46IGluUHJvcCxcbiAgICBvbkVudGVyLFxuICAgIG9uRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nLFxuICAgIG9uRXhpdCxcbiAgICBvbkV4aXRlZCxcbiAgICBvbkV4aXRpbmcsXG4gICAgc3R5bGUsXG4gICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB0aW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZvcmVpZ25SZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBmb3JlaWduUmVmKTtcblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50OyAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cblxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG5cbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cblxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSldLmpvaW4oJywnKTtcblxuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuXG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG5cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGRlbGF5IHx8IGR1cmF0aW9uICogMC4zMzMsXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gZ2V0U2NhbGUoMC43NSk7XG5cbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG5cbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aW1lci5jdXJyZW50ID0gc2V0VGltZW91dChuZXh0LCBhdXRvVGltZW91dC5jdXJyZW50IHx8IDApO1xuICAgIH1cblxuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqXG4gICAqIFNldCB0byAnYXV0bycgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdHJhbnNpdGlvbiB0aW1lIGJhc2VkIG9uIGhlaWdodC5cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5Hcm93Lm11aVN1cHBvcnRBdXRvID0gdHJ1ZTtcbmV4cG9ydCBkZWZhdWx0IEdyb3c7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNuYWNrYmFyQ29udGVudFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU25hY2tiYXJDb250ZW50Jywgc2xvdCk7XG59XG5jb25zdCBzbmFja2JhckNvbnRlbnRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU25hY2tiYXJDb250ZW50JywgWydyb290JywgJ21lc3NhZ2UnLCAnYWN0aW9uJ10pO1xuZXhwb3J0IGRlZmF1bHQgc25hY2tiYXJDb250ZW50Q2xhc3NlczsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2xhc3NOYW1lXCIsIFwibWVzc2FnZVwiLCBcInJvbGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBlbXBoYXNpemUgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFBhcGVyIGZyb20gJy4uL1BhcGVyJztcbmltcG9ydCB7IGdldFNuYWNrYmFyQ29udGVudFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc25hY2tiYXJDb250ZW50Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgYWN0aW9uOiBbJ2FjdGlvbiddLFxuICAgIG1lc3NhZ2U6IFsnbWVzc2FnZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U25hY2tiYXJDb250ZW50VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFNuYWNrYmFyQ29udGVudFJvb3QgPSBzdHlsZWQoUGFwZXIsIHtcbiAgbmFtZTogJ011aVNuYWNrYmFyQ29udGVudCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgZW1waGFzaXMgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAwLjggOiAwLjk4O1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBlbXBoYXNpemUodGhlbWUucGFsZXR0ZS5iYWNrZ3JvdW5kLmRlZmF1bHQsIGVtcGhhc2lzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkyLCB7XG4gICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmRDb2xvciksXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIHBhZGRpbmc6ICc2cHggMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgZmxleEdyb3c6IDEsXG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgZmxleEdyb3c6ICdpbml0aWFsJyxcbiAgICAgIG1pbldpZHRoOiAyODhcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBTbmFja2JhckNvbnRlbnRNZXNzYWdlID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTbmFja2JhckNvbnRlbnQnLFxuICBzbG90OiAnTWVzc2FnZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm1lc3NhZ2Vcbn0pKHtcbiAgcGFkZGluZzogJzhweCAwJ1xufSk7XG5jb25zdCBTbmFja2JhckNvbnRlbnRBY3Rpb24gPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNuYWNrYmFyQ29udGVudCcsXG4gIHNsb3Q6ICdBY3Rpb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hY3Rpb25cbn0pKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgbWFyZ2luTGVmdDogJ2F1dG8nLFxuICBwYWRkaW5nTGVmdDogMTYsXG4gIG1hcmdpblJpZ2h0OiAtOFxufSk7XG5jb25zdCBTbmFja2JhckNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTbmFja2JhckNvbnRlbnQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVNuYWNrYmFyQ29udGVudCdcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFjdGlvbixcbiAgICBjbGFzc05hbWUsXG4gICAgbWVzc2FnZSxcbiAgICByb2xlID0gJ2FsZXJ0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHByb3BzO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU25hY2tiYXJDb250ZW50Um9vdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IHJvbGUsXG4gICAgc3F1YXJlOiB0cnVlLFxuICAgIGVsZXZhdGlvbjogNixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNuYWNrYmFyQ29udGVudE1lc3NhZ2UsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5tZXNzYWdlLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiBtZXNzYWdlXG4gICAgfSksIGFjdGlvbiA/IC8qI19fUFVSRV9fKi9fanN4KFNuYWNrYmFyQ29udGVudEFjdGlvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmFjdGlvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogYWN0aW9uXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNuYWNrYmFyQ29udGVudC5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBkaXNwbGF5LiBJdCByZW5kZXJzIGFmdGVyIHRoZSBtZXNzYWdlLCBhdCB0aGUgZW5kIG9mIHRoZSBzbmFja2Jhci5cbiAgICovXG4gIGFjdGlvbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICovXG4gIG1lc3NhZ2U6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBUaGUgQVJJQSByb2xlIGF0dHJpYnV0ZSBvZiB0aGUgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ2FsZXJ0J1xuICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTbmFja2JhckNvbnRlbnQ7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNuYWNrYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTbmFja2JhcicsIHNsb3QpO1xufVxuY29uc3Qgc25hY2tiYXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU25hY2tiYXInLCBbJ3Jvb3QnLCAnYW5jaG9yT3JpZ2luVG9wQ2VudGVyJywgJ2FuY2hvck9yaWdpbkJvdHRvbUNlbnRlcicsICdhbmNob3JPcmlnaW5Ub3BSaWdodCcsICdhbmNob3JPcmlnaW5Cb3R0b21SaWdodCcsICdhbmNob3JPcmlnaW5Ub3BMZWZ0JywgJ2FuY2hvck9yaWdpbkJvdHRvbUxlZnQnXSk7XG5leHBvcnQgZGVmYXVsdCBzbmFja2JhckNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJcIiwgXCJvbkV4aXRlZFwiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JPcmlnaW5cIiwgXCJhdXRvSGlkZUR1cmF0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJDbGlja0F3YXlMaXN0ZW5lclByb3BzXCIsIFwiQ29udGVudFByb3BzXCIsIFwiZGlzYWJsZVdpbmRvd0JsdXJMaXN0ZW5lclwiLCBcIm1lc3NhZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Nb3VzZUVudGVyXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib3BlblwiLCBcInJlc3VtZUhpZGVEdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgQ2xpY2tBd2F5TGlzdGVuZXIgZnJvbSAnQG11aS9iYXNlL0NsaWNrQXdheUxpc3RlbmVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGR1cmF0aW9uIH0gZnJvbSAnLi4vc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgR3JvdyBmcm9tICcuLi9Hcm93JztcbmltcG9ydCBTbmFja2JhckNvbnRlbnQgZnJvbSAnLi4vU25hY2tiYXJDb250ZW50JztcbmltcG9ydCB7IGdldFNuYWNrYmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zbmFja2JhckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgYW5jaG9yT3JpZ2luXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgYW5jaG9yT3JpZ2luJHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi52ZXJ0aWNhbCl9JHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFNuYWNrYmFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5cbmNvbnN0IFNuYWNrYmFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU25hY2tiYXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2BhbmNob3JPcmlnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwpfSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGNlbnRlciA9IF9leHRlbmRzKHt9LCAhb3duZXJTdGF0ZS5pc1J0bCAmJiB7XG4gICAgbGVmdDogJzUwJScsXG4gICAgcmlnaHQ6ICdhdXRvJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC01MCUpJ1xuICB9LCBvd25lclN0YXRlLmlzUnRsICYmIHtcbiAgICByaWdodDogJzUwJScsXG4gICAgbGVmdDogJ2F1dG8nLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoNTAlKSdcbiAgfSk7XG5cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICB6SW5kZXg6IHRoZW1lLnpJbmRleC5zbmFja2JhcixcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgbGVmdDogOCxcbiAgICByaWdodDogOCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgfSwgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwgPT09ICd0b3AnID8ge1xuICAgIHRvcDogOFxuICB9IDoge1xuICAgIGJvdHRvbTogOFxuICB9LCBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAnbGVmdCcgJiYge1xuICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCdcbiAgfSwgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiB7XG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCdcbiAgfSwge1xuICAgIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ3RvcCcgPyB7XG4gICAgICB0b3A6IDI0XG4gICAgfSA6IHtcbiAgICAgIGJvdHRvbTogMjRcbiAgICB9LCBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAnY2VudGVyJyAmJiBjZW50ZXIsIG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLmhvcml6b250YWwgPT09ICdsZWZ0JyAmJiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgJiYge1xuICAgICAgbGVmdDogMjQsXG4gICAgICByaWdodDogJ2F1dG8nXG4gICAgfSwgb3duZXJTdGF0ZS5pc1J0bCAmJiB7XG4gICAgICByaWdodDogMjQsXG4gICAgICBsZWZ0OiAnYXV0bydcbiAgICB9KSwgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgJiYge1xuICAgICAgcmlnaHQ6IDI0LFxuICAgICAgbGVmdDogJ2F1dG8nXG4gICAgfSwgb3duZXJTdGF0ZS5pc1J0bCAmJiB7XG4gICAgICBsZWZ0OiAyNCxcbiAgICAgIHJpZ2h0OiAnYXV0bydcbiAgICB9KSlcbiAgfSk7XG59KTtcbmNvbnN0IFNuYWNrYmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU25hY2tiYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVNuYWNrYmFyJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgYWN0aW9uLFxuICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgdmVydGljYWwsXG4gICAgICBob3Jpem9udGFsXG4gICAgfSA9IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgIH0sXG4gICAgYXV0b0hpZGVEdXJhdGlvbiA9IG51bGwsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIENsaWNrQXdheUxpc3RlbmVyUHJvcHMsXG4gICAgQ29udGVudFByb3BzLFxuICAgIGRpc2FibGVXaW5kb3dCbHVyTGlzdGVuZXIgPSBmYWxzZSxcbiAgICBtZXNzYWdlLFxuICAgIG9uQ2xvc2UsXG4gICAgb25Nb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZSxcbiAgICBvcGVuLFxuICAgIHJlc3VtZUhpZGVEdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gR3JvdyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSB7XG4gICAgICBlbnRlcjogZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgICBleGl0OiBkdXJhdGlvbi5sZWF2aW5nU2NyZWVuXG4gICAgfSxcbiAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkV4aXRlZFxuICAgIH0gPSB7fVxuICB9ID0gcHJvcHMsXG4gICAgICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBpc1J0bCA9IHRoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgdmVydGljYWwsXG4gICAgICBob3Jpem9udGFsXG4gICAgfSxcbiAgICBpc1J0bFxuICB9KTtcblxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRpbWVyQXV0b0hpZGUgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IHVzZUV2ZW50Q2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZSguLi5hcmdzKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzZXRBdXRvSGlkZVRpbWVyID0gdXNlRXZlbnRDYWxsYmFjayhhdXRvSGlkZUR1cmF0aW9uUGFyYW0gPT4ge1xuICAgIGlmICghb25DbG9zZSB8fCBhdXRvSGlkZUR1cmF0aW9uUGFyYW0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aW1lckF1dG9IaWRlLmN1cnJlbnQpO1xuICAgIHRpbWVyQXV0b0hpZGUuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xvc2UobnVsbCwgJ3RpbWVvdXQnKTtcbiAgICB9LCBhdXRvSGlkZUR1cmF0aW9uUGFyYW0pO1xuICB9KTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgc2V0QXV0b0hpZGVUaW1lcihhdXRvSGlkZUR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyQXV0b0hpZGUuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW29wZW4sIGF1dG9IaWRlRHVyYXRpb24sIHNldEF1dG9IaWRlVGltZXJdKTsgLy8gUGF1c2UgdGhlIHRpbWVyIHdoZW4gdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgU25hY2tiYXJcbiAgLy8gb3Igd2hlbiB0aGUgdXNlciBoaWRlIHRoZSB3aW5kb3cuXG5cbiAgY29uc3QgaGFuZGxlUGF1c2UgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyQXV0b0hpZGUuY3VycmVudCk7XG4gIH07IC8vIFJlc3RhcnQgdGhlIHRpbWVyIHdoZW4gdGhlIHVzZXIgaXMgbm8gbG9uZ2VyIGludGVyYWN0aW5nIHdpdGggdGhlIFNuYWNrYmFyXG4gIC8vIG9yIHdoZW4gdGhlIHdpbmRvdyBpcyBzaG93biBiYWNrLlxuXG5cbiAgY29uc3QgaGFuZGxlUmVzdW1lID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhdXRvSGlkZUR1cmF0aW9uICE9IG51bGwpIHtcbiAgICAgIHNldEF1dG9IaWRlVGltZXIocmVzdW1lSGlkZUR1cmF0aW9uICE9IG51bGwgPyByZXN1bWVIaWRlRHVyYXRpb24gOiBhdXRvSGlkZUR1cmF0aW9uICogMC41KTtcbiAgICB9XG4gIH0sIFthdXRvSGlkZUR1cmF0aW9uLCByZXN1bWVIaWRlRHVyYXRpb24sIHNldEF1dG9IaWRlVGltZXJdKTtcblxuICBjb25zdCBoYW5kbGVNb3VzZUVudGVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbk1vdXNlRW50ZXIpIHtcbiAgICAgIG9uTW91c2VFbnRlcihldmVudCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUGF1c2UoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzdW1lKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tBd2F5ID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50LCAnY2xpY2thd2F5Jyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vZGUgPT4ge1xuICAgIHNldEV4aXRlZCh0cnVlKTtcblxuICAgIGlmIChvbkV4aXRlZCkge1xuICAgICAgb25FeGl0ZWQobm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUVudGVyID0gKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgc2V0RXhpdGVkKGZhbHNlKTtcblxuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBUT0RPOiB3aW5kb3cgZ2xvYmFsIHNob3VsZCBiZSByZWZhY3RvcmVkIGhlcmVcbiAgICBpZiAoIWRpc2FibGVXaW5kb3dCbHVyTGlzdGVuZXIgJiYgb3Blbikge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgaGFuZGxlUmVzdW1lKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgaGFuZGxlUGF1c2UpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgaGFuZGxlUmVzdW1lKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBoYW5kbGVQYXVzZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtkaXNhYmxlV2luZG93Qmx1ckxpc3RlbmVyLCBoYW5kbGVSZXN1bWUsIG9wZW5dKTsgLy8gU28gd2Ugb25seSByZW5kZXIgYWN0aXZlIHNuYWNrYmFycy5cblxuICBpZiAoIW9wZW4gJiYgZXhpdGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2xpY2tBd2F5TGlzdGVuZXIsIF9leHRlbmRzKHtcbiAgICBvbkNsaWNrQXdheTogaGFuZGxlQ2xpY2tBd2F5XG4gIH0sIENsaWNrQXdheUxpc3RlbmVyUHJvcHMsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goU25hY2tiYXJSb290LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgb25Nb3VzZUVudGVyOiBoYW5kbGVNb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlOiBoYW5kbGVNb3VzZUxlYXZlLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgICAgaW46IG9wZW4sXG4gICAgICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgICAgZGlyZWN0aW9uOiB2ZXJ0aWNhbCA9PT0gJ3RvcCcgPyAnZG93bicgOiAndXAnLFxuICAgICAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICAgICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZFxuICAgICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiB8fCAvKiNfX1BVUkVfXyovX2pzeChTbmFja2JhckNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICAgIH0sIENvbnRlbnRQcm9wcykpXG4gICAgICB9KSlcbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTbmFja2Jhci5wcm9wVHlwZXNcbi8qIHJlbW92ZS1wcm9wdHlwZXMgKi9cbj0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBkaXNwbGF5LiBJdCByZW5kZXJzIGFmdGVyIHRoZSBtZXNzYWdlLCBhdCB0aGUgZW5kIG9mIHRoZSBzbmFja2Jhci5cbiAgICovXG4gIGFjdGlvbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIFRoZSBhbmNob3Igb2YgdGhlIGBTbmFja2JhcmAuXG4gICAqIE9uIHNtYWxsZXIgc2NyZWVucywgdGhlIGNvbXBvbmVudCBncm93cyB0byBvY2N1cHkgYWxsIHRoZSBhdmFpbGFibGUgd2lkdGgsXG4gICAqIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBpcyBpZ25vcmVkLlxuICAgKiBAZGVmYXVsdCB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAndG9wJ10pLmlzUmVxdWlyZWRcbiAgfSksXG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGF1dG9tYXRpY2FsbHkgY2FsbGluZyB0aGVcbiAgICogYG9uQ2xvc2VgIGZ1bmN0aW9uLiBgb25DbG9zZWAgc2hvdWxkIHRoZW4gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgYG9wZW5gXG4gICAqIHByb3AgdG8gaGlkZSB0aGUgU25hY2tiYXIuIFRoaXMgYmVoYXZpb3IgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCB3aXRoXG4gICAqIHRoZSBgbnVsbGAgdmFsdWUuXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGF1dG9IaWRlRHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGBTbmFja2JhckNvbnRlbnRgIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudCxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgQ2xpY2tBd2F5TGlzdGVuZXJgIGVsZW1lbnQuXG4gICAqL1xuICBDbGlja0F3YXlMaXN0ZW5lclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNuYWNrYmFyQ29udGVudGBdKC9hcGkvc25hY2tiYXItY29udGVudC8pIGVsZW1lbnQuXG4gICAqL1xuICBDb250ZW50UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBhdXRvSGlkZUR1cmF0aW9uYCB0aW1lciB3aWxsIGV4cGlyZSBldmVuIGlmIHRoZSB3aW5kb3cgaXMgbm90IGZvY3VzZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlV2luZG93Qmx1ckxpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogV2hlbiBkaXNwbGF5aW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlIFNuYWNrYmFycyBmcm9tIGEgcGFyZW50IHJlbmRlcmluZyBhIHNpbmdsZVxuICAgKiA8U25hY2tiYXIvPiwgYWRkIHRoZSBrZXkgcHJvcCB0byBlbnN1cmUgaW5kZXBlbmRlbnQgdHJlYXRtZW50IG9mIGVhY2ggbWVzc2FnZS5cbiAgICogZS5nLiA8U25hY2tiYXIga2V5PXttZXNzYWdlfSAvPiwgb3RoZXJ3aXNlLCB0aGUgbWVzc2FnZSBtYXkgdXBkYXRlLWluLXBsYWNlIGFuZFxuICAgKiBmZWF0dXJlcyBzdWNoIGFzIGF1dG9IaWRlRHVyYXRpb24gbWF5IGJlIGNhbmNlbGVkLlxuICAgKi9cbiAga2V5OiAoKSA9PiBudWxsLFxuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKi9cbiAgbWVzc2FnZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFR5cGljYWxseSBgb25DbG9zZWAgaXMgdXNlZCB0byBzZXQgc3RhdGUgaW4gdGhlIHBhcmVudCBjb21wb25lbnQsXG4gICAqIHdoaWNoIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgYFNuYWNrYmFyYCBgb3BlbmAgcHJvcC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYCxcbiAgICogZm9yIGV4YW1wbGUgaWdub3JpbmcgYGNsaWNrYXdheWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnQ8YW55Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJ0aW1lb3V0XCJgIChgYXV0b0hpZGVEdXJhdGlvbmAgZXhwaXJlZCksIGBcImNsaWNrYXdheVwiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGlzbWlzc2luZyBhZnRlciB1c2VyIGludGVyYWN0aW9uLlxuICAgKiBJZiBgYXV0b0hpZGVEdXJhdGlvbmAgcHJvcCBpc24ndCBzcGVjaWZpZWQsIGl0IGRvZXMgbm90aGluZy5cbiAgICogSWYgYGF1dG9IaWRlRHVyYXRpb25gIHByb3AgaXMgc3BlY2lmaWVkIGJ1dCBgcmVzdW1lSGlkZUR1cmF0aW9uYCBpc24ndCxcbiAgICogd2UgZGVmYXVsdCB0byBgYXV0b0hpZGVEdXJhdGlvbiAvIDJgIG1zLlxuICAgKi9cbiAgcmVzdW1lSGlkZUR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvY29tcG9uZW50cy90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IGR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IGR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTbmFja2JhcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBwcm9wVG9TdHlsZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZ2V0VGhlbWVWYWx1ZSc7XG5cbmNvbnN0IHNwbGl0UHJvcHMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKHByb3BUb1N0eWxlRnVuY3Rpb25bcHJvcF0pIHtcbiAgICAgIHJlc3VsdC5zeXN0ZW1Qcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQub3RoZXJQcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN4OiBpblN4XG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgc3g6IGZpbmFsU3hcbiAgfSk7XG59IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVR5cG9ncmFwaHknLCBzbG90KTtcbn1cbmNvbnN0IHR5cG9ncmFwaHlDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVHlwb2dyYXBoeScsIFsncm9vdCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJywgJ2JvZHkxJywgJ2JvZHkyJywgJ2luaGVyaXQnLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnb3ZlcmxpbmUnLCAnYWxpZ25MZWZ0JywgJ2FsaWduUmlnaHQnLCAnYWxpZ25DZW50ZXInLCAnYWxpZ25KdXN0aWZ5JywgJ25vV3JhcCcsICdndXR0ZXJCb3R0b20nLCAncGFyYWdyYXBoJ10pO1xuZXhwb3J0IGRlZmF1bHQgdHlwb2dyYXBoeUNsYXNzZXM7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyQm90dG9tXCIsIFwibm9XcmFwXCIsIFwicGFyYWdyYXBoXCIsIFwidmFyaWFudFwiLCBcInZhcmlhbnRNYXBwaW5nXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfZXh0ZW5kU3hQcm9wIGFzIGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3R5cG9ncmFwaHlDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCAmJiB0aGVtZS50eXBvZ3JhcGh5W293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiB7XG4gIHRleHRBbGlnbjogb3duZXJTdGF0ZS5hbGlnblxufSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHtcbiAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xufSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYge1xuICBtYXJnaW5Cb3R0b206IDE2XG59KSk7XG5jb25zdCBkZWZhdWx0VmFyaWFudE1hcHBpbmcgPSB7XG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIHN1YnRpdGxlMTogJ2g2JyxcbiAgc3VidGl0bGUyOiAnaDYnLFxuICBib2R5MTogJ3AnLFxuICBib2R5MjogJ3AnLFxuICBpbmhlcml0OiAncCdcbn07IC8vIFRPRE8gdjY6IGRlcHJlY2F0ZSB0aGVzZSBjb2xvciB2YWx1ZXMgaW4gdjUueCBhbmQgcmVtb3ZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB2NlxuXG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuXG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcblxuY29uc3QgVHlwb2dyYXBoeSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFR5cG9ncmFwaHkoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG5cbiAgY29uc3Qge1xuICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgbm9XcmFwID0gZmFsc2UsXG4gICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgdmFyaWFudE1hcHBpbmcgPSBkZWZhdWx0VmFyaWFudE1hcHBpbmdcbiAgfSA9IHByb3BzLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG5cbiAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50IHx8IChwYXJhZ3JhcGggPyAncCcgOiB2YXJpYW50TWFwcGluZ1t2YXJpYW50XSB8fCBkZWZhdWx0VmFyaWFudE1hcHBpbmdbdmFyaWFudF0pIHx8ICdzcGFuJztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50LFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUeXBvZ3JhcGh5LnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhIHBhcmFncmFwaCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyYWdyYXBoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCJjb25zdCBjb21tb24gPSB7XG4gIGJsYWNrOiAnIzAwMCcsXG4gIHdoaXRlOiAnI2ZmZidcbn07XG5leHBvcnQgZGVmYXVsdCBjb21tb247IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9NjAxMDMsYz02MDEwNixkPTYwMTA3LGU9NjAxMDgsZj02MDExNCxnPTYwMTA5LGg9NjAxMTAsaz02MDExMixsPTYwMTEzLG09NjAxMjAsbj02MDExNSxwPTYwMTE2LHE9NjAxMjEscj02MDEyMix1PTYwMTE3LHY9NjAxMjksdz02MDEzMTtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB4PVN5bWJvbC5mb3I7Yj14KFwicmVhY3QuZWxlbWVudFwiKTtjPXgoXCJyZWFjdC5wb3J0YWxcIik7ZD14KFwicmVhY3QuZnJhZ21lbnRcIik7ZT14KFwicmVhY3Quc3RyaWN0X21vZGVcIik7Zj14KFwicmVhY3QucHJvZmlsZXJcIik7Zz14KFwicmVhY3QucHJvdmlkZXJcIik7aD14KFwicmVhY3QuY29udGV4dFwiKTtrPXgoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtsPXgoXCJyZWFjdC5zdXNwZW5zZVwiKTttPXgoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpO249eChcInJlYWN0Lm1lbW9cIik7cD14KFwicmVhY3QubGF6eVwiKTtxPXgoXCJyZWFjdC5ibG9ja1wiKTtyPXgoXCJyZWFjdC5zZXJ2ZXIuYmxvY2tcIik7dT14KFwicmVhY3QuZnVuZGFtZW50YWxcIik7dj14KFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTt3PXgoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpfVxuZnVuY3Rpb24geShhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdD1hLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIGI6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgZDpjYXNlIGY6Y2FzZSBlOmNhc2UgbDpjYXNlIG06cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgaDpjYXNlIGs6Y2FzZSBwOmNhc2UgbjpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBjOnJldHVybiB0fX19dmFyIHo9ZyxBPWIsQj1rLEM9ZCxEPXAsRT1uLEY9YyxHPWYsSD1lLEk9bDtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPXo7ZXhwb3J0cy5FbGVtZW50PUE7ZXhwb3J0cy5Gb3J3YXJkUmVmPUI7ZXhwb3J0cy5GcmFnbWVudD1DO2V4cG9ydHMuTGF6eT1EO2V4cG9ydHMuTWVtbz1FO2V4cG9ydHMuUG9ydGFsPUY7ZXhwb3J0cy5Qcm9maWxlcj1HO2V4cG9ydHMuU3RyaWN0TW9kZT1IO1xuZXhwb3J0cy5TdXNwZW5zZT1JO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09a307ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1wfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PW59O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09bH07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09dnx8YT09PWV8fGE9PT1sfHxhPT09bXx8YT09PXd8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT1nfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT11fHxhLiQkdHlwZW9mPT09cXx8YVswXT09PXIpPyEwOiExfTtcbmV4cG9ydHMudHlwZU9mPXk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImNvbnN0IGdyZXkgPSB7XG4gIDUwOiAnI2ZhZmFmYScsXG4gIDEwMDogJyNmNWY1ZjUnLFxuICAyMDA6ICcjZWVlZWVlJyxcbiAgMzAwOiAnI2UwZTBlMCcsXG4gIDQwMDogJyNiZGJkYmQnLFxuICA1MDA6ICcjOWU5ZTllJyxcbiAgNjAwOiAnIzc1NzU3NScsXG4gIDcwMDogJyM2MTYxNjEnLFxuICA4MDA6ICcjNDI0MjQyJyxcbiAgOTAwOiAnIzIxMjEyMScsXG4gIEExMDA6ICcjZjVmNWY1JyxcbiAgQTIwMDogJyNlZWVlZWUnLFxuICBBNDAwOiAnI2JkYmRiZCcsXG4gIEE3MDA6ICcjNjE2MTYxJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZXk7IiwiY29uc3QgcHVycGxlID0ge1xuICA1MDogJyNmM2U1ZjUnLFxuICAxMDA6ICcjZTFiZWU3JyxcbiAgMjAwOiAnI2NlOTNkOCcsXG4gIDMwMDogJyNiYTY4YzgnLFxuICA0MDA6ICcjYWI0N2JjJyxcbiAgNTAwOiAnIzljMjdiMCcsXG4gIDYwMDogJyM4ZTI0YWEnLFxuICA3MDA6ICcjN2IxZmEyJyxcbiAgODAwOiAnIzZhMWI5YScsXG4gIDkwMDogJyM0YTE0OGMnLFxuICBBMTAwOiAnI2VhODBmYycsXG4gIEEyMDA6ICcjZTA0MGZiJyxcbiAgQTQwMDogJyNkNTAwZjknLFxuICBBNzAwOiAnI2FhMDBmZidcbn07XG5leHBvcnQgZGVmYXVsdCBwdXJwbGU7IiwiY29uc3QgYmx1ZSA9IHtcbiAgNTA6ICcjZTNmMmZkJyxcbiAgMTAwOiAnI2JiZGVmYicsXG4gIDIwMDogJyM5MGNhZjknLFxuICAzMDA6ICcjNjRiNWY2JyxcbiAgNDAwOiAnIzQyYTVmNScsXG4gIDUwMDogJyMyMTk2ZjMnLFxuICA2MDA6ICcjMWU4OGU1JyxcbiAgNzAwOiAnIzE5NzZkMicsXG4gIDgwMDogJyMxNTY1YzAnLFxuICA5MDA6ICcjMGQ0N2ExJyxcbiAgQTEwMDogJyM4MmIxZmYnLFxuICBBMjAwOiAnIzQ0OGFmZicsXG4gIEE0MDA6ICcjMjk3OWZmJyxcbiAgQTcwMDogJyMyOTYyZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgYmx1ZTsiLCJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuXG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcblxuICBpZiAoIWludGVudFtkaXJlY3Rpb25dKSB7XG4gICAgaWYgKGludGVudC5oYXNPd25Qcm9wZXJ0eShzaGFkZSkpIHtcbiAgICAgIGludGVudFtkaXJlY3Rpb25dID0gaW50ZW50W3NoYWRlXTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xpZ2h0Jykge1xuICAgICAgaW50ZW50LmxpZ2h0ID0gbGlnaHRlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXRMaWdodCk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkYXJrJykge1xuICAgICAgaW50ZW50LmRhcmsgPSBkYXJrZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0RGFyayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBwdXJwbGVbMjAwXSxcbiAgICAgIGxpZ2h0OiBwdXJwbGVbNTBdLFxuICAgICAgZGFyazogcHVycGxlWzQwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46IHJlZFs3MDBdLFxuICAgIGxpZ2h0OiByZWRbNDAwXSxcbiAgICBkYXJrOiByZWRbODAwXVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBncmVlbls0MDBdLFxuICAgICAgbGlnaHQ6IGdyZWVuWzMwMF0sXG4gICAgICBkYXJrOiBncmVlbls3MDBdXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1haW46ICcjZWQ2YzAyJyxcbiAgICAvLyBjbG9zZXN0IHRvIG9yYW5nZVs4MDBdIHRoYXQgcGFzcyAzOjEuXG4gICAgbGlnaHQ6IG9yYW5nZVs1MDBdLFxuICAgIGRhcms6IG9yYW5nZVs5MDBdXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgbW9kZSA9ICdsaWdodCcsXG4gICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gIH0gPSBwYWxldHRlLFxuICAgICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG5cbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGUucHJpbWFyeSB8fCBnZXREZWZhdWx0UHJpbWFyeShtb2RlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gcGFsZXR0ZS5zZWNvbmRhcnkgfHwgZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlKTtcbiAgY29uc3QgZXJyb3IgPSBwYWxldHRlLmVycm9yIHx8IGdldERlZmF1bHRFcnJvcihtb2RlKTtcbiAgY29uc3QgaW5mbyA9IHBhbGV0dGUuaW5mbyB8fCBnZXREZWZhdWx0SW5mbyhtb2RlKTtcbiAgY29uc3Qgc3VjY2VzcyA9IHBhbGV0dGUuc3VjY2VzcyB8fCBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlKTtcbiAgY29uc3Qgd2FybmluZyA9IHBhbGV0dGUud2FybmluZyB8fCBnZXREZWZhdWx0V2FybmluZyhtb2RlKTsgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuXG4gIGZ1bmN0aW9uIGdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBkYXJrLnRleHQucHJpbWFyeSkgPj0gY29udHJhc3RUaHJlc2hvbGQgPyBkYXJrLnRleHQucHJpbWFyeSA6IGxpZ2h0LnRleHQucHJpbWFyeTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcblxuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJhc3RUZXh0O1xuICB9XG5cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuXG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cblxuICAgIGlmICghY29sb3IuaGFzT3duUHJvcGVydHkoJ21haW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5UaGUgY29sb3Igb2JqZWN0IG5lZWRzIHRvIGhhdmUgYSBcXGBtYWluXFxgIHByb3BlcnR5IG9yIGEgXFxgJHttYWluU2hhZGV9XFxgIHByb3BlcnR5LmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDExLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIG1haW5TaGFkZSkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG5cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuXG4gICAgaWYgKCFjb2xvci5jb250cmFzdFRleHQpIHtcbiAgICAgIGNvbG9yLmNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0VGV4dChjb2xvci5tYWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG5cbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFtb2Rlc1ttb2RlXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgcGFsZXR0ZSBtb2RlIFxcYCR7bW9kZX1cXGAgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb24sXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5cbmNvbnN0IGNhc2VBbGxDYXBzID0ge1xuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xufTtcbmNvbnN0IGRlZmF1bHRGb250RmFtaWx5ID0gJ1wiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZic7XG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHkpIHtcbiAgY29uc3QgX3JlZiA9IHR5cGVvZiB0eXBvZ3JhcGh5ID09PSAnZnVuY3Rpb24nID8gdHlwb2dyYXBoeShwYWxldHRlKSA6IHR5cG9ncmFwaHksXG4gICAgICAgIHtcbiAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIG9mIHRoZSBNYXRlcmlhbCBTcGVjaWZpY2F0aW9uLlxuICAgIGZvbnRTaXplID0gMTQsXG4gICAgLy8gcHhcbiAgICBmb250V2VpZ2h0TGlnaHQgPSAzMDAsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICBmb250V2VpZ2h0Qm9sZCA9IDcwMCxcbiAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgaHRtbEZvbnRTaXplID0gMTYsXG4gICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgYWxsVmFyaWFudHMsXG4gICAgcHhUb1JlbTogcHhUb1JlbTJcbiAgfSA9IF9yZWYsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBodG1sRm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBodG1sRm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuXG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcblxuICBjb25zdCBidWlsZFZhcmlhbnQgPSAoZm9udFdlaWdodCwgc2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZywgY2FzaW5nKSA9PiBfZXh0ZW5kcyh7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGZvbnRTaXplOiBweFRvUmVtKHNpemUpLFxuICAgIC8vIFVuaXRsZXNzIGZvbGxvd2luZyBodHRwczovL21leWVyd2ViLmNvbS9lcmljL3Rob3VnaHRzLzIwMDYvMDIvMDgvdW5pdGxlc3MtbGluZS1oZWlnaHRzL1xuICAgIGxpbmVIZWlnaHRcbiAgfSwgZm9udEZhbWlseSA9PT0gZGVmYXVsdEZvbnRGYW1pbHkgPyB7XG4gICAgbGV0dGVyU3BhY2luZzogYCR7cm91bmQobGV0dGVyU3BhY2luZyAvIHNpemUpfWVtYFxuICB9IDoge30sIGNhc2luZywgYWxsVmFyaWFudHMpO1xuXG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcylcbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuXG4gIH0pO1xufSIsImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59IC8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuXG5cbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJtaXhpbnNcIiwgXCJzcGFjaW5nXCIsIFwicGFsZXR0ZVwiLCBcInRyYW5zaXRpb25zXCIsIFwidHlwb2dyYXBoeVwiLCBcInNoYXBlXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVV0aWxpdHlDbGFzcyB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSBhcyBzeXN0ZW1DcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjcmVhdGVNaXhpbnMgZnJvbSAnLi9jcmVhdGVNaXhpbnMnO1xuaW1wb3J0IGNyZWF0ZVBhbGV0dGUgZnJvbSAnLi9jcmVhdGVQYWxldHRlJztcbmltcG9ydCBjcmVhdGVUeXBvZ3JhcGh5IGZyb20gJy4vY3JlYXRlVHlwb2dyYXBoeSc7XG5pbXBvcnQgc2hhZG93cyBmcm9tICcuL3NoYWRvd3MnO1xuaW1wb3J0IGNyZWF0ZVRyYW5zaXRpb25zIGZyb20gJy4vY3JlYXRlVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHpJbmRleCBmcm9tICcuL3pJbmRleCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgbWl4aW5zOiBtaXhpbnNJbnB1dCA9IHt9LFxuICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgdHlwb2dyYXBoeTogdHlwb2dyYXBoeUlucHV0ID0ge31cbiAgfSA9IG9wdGlvbnMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBwYWxldHRlID0gY3JlYXRlUGFsZXR0ZShwYWxldHRlSW5wdXQpO1xuICBjb25zdCBzeXN0ZW1UaGVtZSA9IHN5c3RlbUNyZWF0ZVRoZW1lKG9wdGlvbnMpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoc3lzdGVtVGhlbWUsIHtcbiAgICBtaXhpbnM6IGNyZWF0ZU1peGlucyhzeXN0ZW1UaGVtZS5icmVha3BvaW50cywgc3lzdGVtVGhlbWUuc3BhY2luZywgbWl4aW5zSW5wdXQpLFxuICAgIHBhbGV0dGUsXG4gICAgLy8gRG9uJ3QgdXNlIFsuLi5zaGFkb3dzXSB1bnRpbCB5b3UndmUgdmVyaWZpZWQgaXRzIHRyYW5zcGlsZWQgY29kZSBpcyBub3QgaW52b2tpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLlxuICAgIHNoYWRvd3M6IHNoYWRvd3Muc2xpY2UoKSxcbiAgICB0eXBvZ3JhcGh5OiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHlJbnB1dCksXG4gICAgdHJhbnNpdGlvbnM6IGNyZWF0ZVRyYW5zaXRpb25zKHRyYW5zaXRpb25zSW5wdXQpLFxuICAgIHpJbmRleDogX2V4dGVuZHMoe30sIHpJbmRleClcbiAgfSk7XG4gIG11aVRoZW1lID0gZGVlcG1lcmdlKG11aVRoZW1lLCBvdGhlcik7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuICAgICAgZm9yIChrZXkgaW4gbm9kZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVba2V5XTtcblxuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfSAvLyBSZW1vdmUgdGhlIHN0eWxlIHRvIHByZXZlbnQgZ2xvYmFsIGNvbmZsaWN0cy5cblxuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMobXVpVGhlbWUuY29tcG9uZW50cykuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSBtdWlUaGVtZS5jb21wb25lbnRzW2NvbXBvbmVudF0uc3R5bGVPdmVycmlkZXM7XG5cbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbXVpVGhlbWU7XG59XG5cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVRoZW1lKC4uLmFyZ3MpO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIHNwYWNpbmcsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYCR7YnJlYWtwb2ludHMudXAoJ3hzJyl9IGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSlgXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkdXJhdGlvblwiLCBcImVhc2luZ1wiLCBcImRlbGF5XCJdO1xuLy8gRm9sbG93IGh0dHBzOi8vbWF0ZXJpYWwuZ29vZ2xlLmNvbS9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLW5hdHVyYWwtZWFzaW5nLWN1cnZlc1xuLy8gdG8gbGVhcm4gdGhlIGNvbnRleHQgaW4gd2hpY2ggZWFjaCBlYXNpbmcgc2hvdWxkIGJlIHVzZWQuXG5leHBvcnQgY29uc3QgZWFzaW5nID0ge1xuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBlYXNpbmcgY3VydmUuXG4gIGVhc2VJbk91dDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGVudGVyIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eSBmcm9tIG9mZi1zY3JlZW4gYW5kXG4gIC8vIHNsb3dseSBkZWNlbGVyYXRlIHRvIGEgcmVzdGluZyBwb2ludC5cbiAgZWFzZU91dDogJ2N1YmljLWJlemllcigwLjAsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGxlYXZlIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eS4gVGhleSBkbyBub3QgZGVjZWxlcmF0ZSB3aGVuIG9mZi1zY3JlZW4uXG4gIGVhc2VJbjogJ2N1YmljLWJlemllcigwLjQsIDAsIDEsIDEpJyxcbiAgLy8gVGhlIHNoYXJwIGN1cnZlIGlzIHVzZWQgYnkgb2JqZWN0cyB0aGF0IG1heSByZXR1cm4gdG8gdGhlIHNjcmVlbiBhdCBhbnkgdGltZS5cbiAgc2hhcnA6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpJ1xufTsgLy8gRm9sbG93IGh0dHBzOi8vbWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLWNvbW1vbi1kdXJhdGlvbnNcbi8vIHRvIGxlYXJuIHdoZW4gdXNlIHdoYXQgdGltaW5nXG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcblxuZnVuY3Rpb24gZm9ybWF0TXMobWlsbGlzZWNvbmRzKSB7XG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xufVxuXG5mdW5jdGlvbiBnZXRBdXRvSGVpZ2h0RHVyYXRpb24oaGVpZ2h0KSB7XG4gIGlmICghaGVpZ2h0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2OyAvLyBodHRwczovL3d3dy53b2xmcmFtYWxwaGEuY29tL2lucHV0Lz9pPSg0KyUyQisxNSsqKyh4KyUyRiszNispKyoqKzAuMjUrJTJCKyh4KyUyRiszNikrJTJGKzUpKyorMTBcblxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25zKGlucHV0VHJhbnNpdGlvbnMpIHtcbiAgY29uc3QgbWVyZ2VkRWFzaW5nID0gX2V4dGVuZHMoe30sIGVhc2luZywgaW5wdXRUcmFuc2l0aW9ucy5lYXNpbmcpO1xuXG4gIGNvbnN0IG1lcmdlZER1cmF0aW9uID0gX2V4dGVuZHMoe30sIGR1cmF0aW9uLCBpbnB1dFRyYW5zaXRpb25zLmR1cmF0aW9uKTtcblxuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogZHVyYXRpb25PcHRpb24gPSBtZXJnZWREdXJhdGlvbi5zdGFuZGFyZCxcbiAgICAgIGVhc2luZzogZWFzaW5nT3B0aW9uID0gbWVyZ2VkRWFzaW5nLmVhc2VJbk91dCxcbiAgICAgIGRlbGF5ID0gMFxuICAgIH0gPSBvcHRpb25zLFxuICAgICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7IC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuXG5cbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcblxuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOdW1iZXIoZHVyYXRpb25PcHRpb24pICYmICFpc1N0cmluZyhkdXJhdGlvbk9wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBBcmd1bWVudCBcImR1cmF0aW9uXCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZyBidXQgZm91bmQgJHtkdXJhdGlvbk9wdGlvbn0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTdHJpbmcoZWFzaW5nT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZWFzaW5nXCIgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMob3RoZXIpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFVucmVjb2duaXplZCBhcmd1bWVudChzKSBbJHtPYmplY3Qua2V5cyhvdGhlcikuam9pbignLCcpfV0uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZ2V0QXV0b0hlaWdodER1cmF0aW9uLFxuICAgIGNyZWF0ZVxuICB9LCBpbnB1dFRyYW5zaXRpb25zLCB7XG4gICAgZWFzaW5nOiBtZXJnZWRFYXNpbmcsXG4gICAgZHVyYXRpb246IG1lcmdlZER1cmF0aW9uXG4gIH0pO1xufSIsImltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YXJpYW50XCJdO1xuaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbmZ1bmN0aW9uIGlzRW1wdHkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAwO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgc3RyaW5nIGNsYXNzS2V5IGJhc2VkIG9uIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkLiBJdCBzdGFydHMgd2l0aCB0aGVcbiAqIHZhcmlhbnQgaWYgZGVmaW5lZCwgYW5kIHRoZW4gaXQgYXBwZW5kcyBhbGwgb3RoZXIgcHJvcGVydGllcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgLSB0aGUgcHJvcGVydGllcyBmb3Igd2hpY2ggdGhlIGNsYXNzS2V5IHNob3VsZCBiZSBjcmVhdGVkLlxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvcHNUb0NsYXNzS2V5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB2YXJpYW50XG4gIH0gPSBwcm9wcyxcbiAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBsZXQgY2xhc3NLZXkgPSB2YXJpYW50IHx8ICcnO1xuICBPYmplY3Qua2V5cyhvdGhlcikuc29ydCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5ID09PSAnY29sb3InKSB7XG4gICAgICBjbGFzc0tleSArPSBpc0VtcHR5KGNsYXNzS2V5KSA/IHByb3BzW2tleV0gOiBjYXBpdGFsaXplKHByb3BzW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc0tleSArPSBgJHtpc0VtcHR5KGNsYXNzS2V5KSA/IGtleSA6IGNhcGl0YWxpemUoa2V5KX0ke2NhcGl0YWxpemUocHJvcHNba2V5XS50b1N0cmluZygpKX1gO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc0tleTtcbn0iLCJpbXBvcnQgbWVyZ2UgZnJvbSAnLi4vbWVyZ2UnO1xuaW1wb3J0IHsgc3R5bGVGdW5jdGlvbk1hcHBpbmcgYXMgZGVmYXVsdFN0eWxlRnVuY3Rpb25NYXBwaW5nIH0gZnJvbSAnLi4vZ2V0VGhlbWVWYWx1ZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcblxuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxJZkZuKG1heWJlRm4sIGFyZykge1xuICByZXR1cm4gdHlwZW9mIG1heWJlRm4gPT09ICdmdW5jdGlvbicgPyBtYXliZUZuKGFyZykgOiBtYXliZUZuO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeChzdHlsZUZ1bmN0aW9uTWFwcGluZyA9IGRlZmF1bHRTdHlsZUZ1bmN0aW9uTWFwcGluZykge1xuICBjb25zdCBwcm9wVG9TdHlsZUZ1bmN0aW9uID0gT2JqZWN0LmtleXMoc3R5bGVGdW5jdGlvbk1hcHBpbmcpLnJlZHVjZSgoYWNjLCBzdHlsZUZuTmFtZSkgPT4ge1xuICAgIHN0eWxlRnVuY3Rpb25NYXBwaW5nW3N0eWxlRm5OYW1lXS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgIGFjY1twcm9wTmFtZV0gPSBzdHlsZUZ1bmN0aW9uTWFwcGluZ1tzdHlsZUZuTmFtZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGZ1bmN0aW9uIGdldFRoZW1lVmFsdWUocHJvcCwgdmFsdWUsIHRoZW1lKSB7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsdWUsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgc3R5bGVGdW5jdGlvbiA9IHByb3BUb1N0eWxlRnVuY3Rpb25bcHJvcF07XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb24gPyBzdHlsZUZ1bmN0aW9uKGlucHV0UHJvcHMpIDoge1xuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzeCxcbiAgICAgIHRoZW1lID0ge31cbiAgICB9ID0gcHJvcHMgfHwge307XG5cbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG5cblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHN4SW5wdXQpIHtcbiAgICAgIGxldCBzeE9iamVjdCA9IHN4SW5wdXQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QodGhlbWUuYnJlYWtwb2ludHMpO1xuICAgICAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyk7XG4gICAgICBsZXQgY3NzID0gZW1wdHlCcmVha3BvaW50cztcbiAgICAgIE9iamVjdC5rZXlzKHN4T2JqZWN0KS5mb3JFYWNoKHN0eWxlS2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsSWZGbihzeE9iamVjdFtzdHlsZUtleV0sIHRoZW1lKTtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAocHJvcFRvU3R5bGVGdW5jdGlvbltzdHlsZUtleV0pIHtcbiAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0sIHZhbHVlLCB4ID0+ICh7XG4gICAgICAgICAgICAgICAgW3N0eWxlS2V5XTogeFxuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGJyZWFrcG9pbnRzVmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHN4KSA/IHN4Lm1hcCh0cmF2ZXJzZSkgOiB0cmF2ZXJzZShzeCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJ0aGVtZVwiXSxcbiAgICAgIF9leGNsdWRlZDMgPSBbXCJ0aGVtZVwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBzdHlsZWRFbmdpbmVTdHlsZWQsIHsgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyBhcyBwcm9jZXNzU3R5bGVzIH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB7IGdldERpc3BsYXlOYW1lIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgcHJvcHNUb0NsYXNzS2V5IGZyb20gJy4vcHJvcHNUb0NsYXNzS2V5JztcbmltcG9ydCBkZWZhdWx0U3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufSAvLyBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMjZkZWQ2MTA5ZmNkOGNhOTg3NWNjMmNlNDU2NGZlZTY3OGEzZjNjNS9wYWNrYWdlcy9zdHlsZWQvc3JjL3V0aWxzLmpzI0w0MFxuXG5cbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuY29uc3QgZ2V0U3R5bGVPdmVycmlkZXMgPSAobmFtZSwgdGhlbWUpID0+IHtcbiAgaWYgKHRoZW1lLmNvbXBvbmVudHMgJiYgdGhlbWUuY29tcG9uZW50c1tuYW1lXSAmJiB0aGVtZS5jb21wb25lbnRzW25hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgcmV0dXJuIHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGdldFZhcmlhbnRTdHlsZXMgPSAobmFtZSwgdGhlbWUpID0+IHtcbiAgbGV0IHZhcmlhbnRzID0gW107XG5cbiAgaWYgKHRoZW1lICYmIHRoZW1lLmNvbXBvbmVudHMgJiYgdGhlbWUuY29tcG9uZW50c1tuYW1lXSAmJiB0aGVtZS5jb21wb25lbnRzW25hbWVdLnZhcmlhbnRzKSB7XG4gICAgdmFyaWFudHMgPSB0aGVtZS5jb21wb25lbnRzW25hbWVdLnZhcmlhbnRzO1xuICB9XG5cbiAgY29uc3QgdmFyaWFudHNTdHlsZXMgPSB7fTtcbiAgdmFyaWFudHMuZm9yRWFjaChkZWZpbml0aW9uID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wc1RvQ2xhc3NLZXkoZGVmaW5pdGlvbi5wcm9wcyk7XG4gICAgdmFyaWFudHNTdHlsZXNba2V5XSA9IGRlZmluaXRpb24uc3R5bGU7XG4gIH0pO1xuICByZXR1cm4gdmFyaWFudHNTdHlsZXM7XG59O1xuXG5jb25zdCB2YXJpYW50c1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMsIHRoZW1lLCBuYW1lKSA9PiB7XG4gIHZhciBfdGhlbWUkY29tcG9uZW50cywgX3RoZW1lJGNvbXBvbmVudHMkbmFtO1xuXG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YXJpYW50c1N0eWxlcyA9IFtdO1xuICBjb25zdCB0aGVtZVZhcmlhbnRzID0gdGhlbWUgPT0gbnVsbCA/IHZvaWQgMCA6IChfdGhlbWUkY29tcG9uZW50cyA9IHRoZW1lLmNvbXBvbmVudHMpID09IG51bGwgPyB2b2lkIDAgOiAoX3RoZW1lJGNvbXBvbmVudHMkbmFtID0gX3RoZW1lJGNvbXBvbmVudHNbbmFtZV0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkY29tcG9uZW50cyRuYW0udmFyaWFudHM7XG5cbiAgaWYgKHRoZW1lVmFyaWFudHMpIHtcbiAgICB0aGVtZVZhcmlhbnRzLmZvckVhY2godGhlbWVWYXJpYW50ID0+IHtcbiAgICAgIGxldCBpc01hdGNoID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5rZXlzKHRoZW1lVmFyaWFudC5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAob3duZXJTdGF0ZVtrZXldICE9PSB0aGVtZVZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB0aGVtZVZhcmlhbnQucHJvcHNba2V5XSkge1xuICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIHZhcmlhbnRzU3R5bGVzLnB1c2goc3R5bGVzW3Byb3BzVG9DbGFzc0tleSh0aGVtZVZhcmlhbnQucHJvcHMpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFudHNTdHlsZXM7XG59OyAvLyBVcGRhdGUgL3N5c3RlbS9zdHlsZWQvI2FwaSBpbiBjYXNlIGlmIHRoaXMgY2hhbmdlc1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzdHlsZUZ1bmN0aW9uU3ggPSBkZWZhdWx0U3R5bGVGdW5jdGlvblN4XG4gIH0gPSBpbnB1dDtcblxuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IGlzRW1wdHkocHJvcHMudGhlbWUpID8gZGVmYXVsdFRoZW1lIDogcHJvcHMudGhlbWU7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lXG4gICAgfSkpO1xuICB9O1xuXG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgcHJvY2Vzc1N0eWxlcyh0YWcsIHN0eWxlcyA9PiBzdHlsZXMuZmlsdGVyKHN0eWxlID0+ICEoc3R5bGUgIT0gbnVsbCAmJiBzdHlsZS5fX211aV9zeXN0ZW1TeCkpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgc2tpcFZhcmlhbnRzUmVzb2x2ZXI6IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIsXG4gICAgICBza2lwU3g6IGlucHV0U2tpcFN4LFxuICAgICAgb3ZlcnJpZGVzUmVzb2x2ZXJcbiAgICB9ID0gaW5wdXRPcHRpb25zLFxuICAgICAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZCk7IC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG5cblxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6IGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSBzdHlsZWRFbmdpbmVTdHlsZWQodGFnLCBfZXh0ZW5kcyh7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcDogc2hvdWxkRm9yd2FyZFByb3BPcHRpb24sXG4gICAgICBsYWJlbFxuICAgIH0sIG9wdGlvbnMpKTtcblxuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lID0gZXhwcmVzc2lvbnMgPyBleHByZXNzaW9ucy5tYXAoc3R5bGVzQXJnID0+IHtcbiAgICAgICAgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAgIC8vIGNvbXBvbmVudCBzdGF5cyBhcyBhIGZ1bmN0aW9uLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UgZG8gbm90IGludGVycG9sYXRlIGZ1bmN0aW9uc1xuICAgICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdHlsZXNBcmcgPT09ICdmdW5jdGlvbicgJiYgc3R5bGVzQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZXNBcmcgPyBfcmVmID0+IHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdGhlbWU6IHRoZW1lSW5wdXRcbiAgICAgICAgICB9ID0gX3JlZixcbiAgICAgICAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXNBcmcoX2V4dGVuZHMoe1xuICAgICAgICAgICAgdGhlbWU6IGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0XG4gICAgICAgICAgfSwgb3RoZXIpKTtcbiAgICAgICAgfSA6IHN0eWxlc0FyZztcbiAgICAgIH0pIDogW107XG4gICAgICBsZXQgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IHN0eWxlQXJnO1xuXG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiBvdmVycmlkZXNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSBpc0VtcHR5KHByb3BzLnRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHByb3BzLnRoZW1lO1xuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gZ2V0U3R5bGVPdmVycmlkZXMoY29tcG9uZW50TmFtZSwgdGhlbWUpO1xuXG4gICAgICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHR5cGVvZiBzbG90U3R5bGUgPT09ICdmdW5jdGlvbicgPyBzbG90U3R5bGUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSkpIDogc2xvdFN0eWxlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHJlc29sdmVkU3R5bGVPdmVycmlkZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IGlzRW1wdHkocHJvcHMudGhlbWUpID8gZGVmYXVsdFRoZW1lIDogcHJvcHMudGhlbWU7XG4gICAgICAgICAgcmV0dXJuIHZhcmlhbnRzUmVzb2x2ZXIocHJvcHMsIGdldFZhcmlhbnRTdHlsZXMoY29tcG9uZW50TmFtZSwgdGhlbWUpLCB0aGVtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpOyAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cblxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHlsZUFyZyA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBPbiB0aGUgc2VydmVyIEVtb3Rpb24gZG9lc24ndCB1c2UgUmVhY3QuZm9yd2FyZFJlZiBmb3IgY3JlYXRpbmcgY29tcG9uZW50cywgc28gdGhlIGNyZWF0ZWRcbiAgICAgIC8vIGNvbXBvbmVudCBzdGF5cyBhcyBhIGZ1bmN0aW9uLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UgZG8gbm90IGludGVycG9sYXRlIGZ1bmN0aW9uc1xuICAgICAgLy8gd2hpY2ggYXJlIGJhc2ljYWxseSBjb21wb25lbnRzIHVzZWQgYXMgYSBzZWxlY3RvcnMuXG4gICAgICBzdHlsZUFyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVBcmcpIHtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgZnVuY3Rpb24sIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IHRoZW1lLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gX3JlZjIgPT4ge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICB0aGVtZTogdGhlbWVJbnB1dFxuICAgICAgICAgIH0gPSBfcmVmMixcbiAgICAgICAgICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMiwgX2V4Y2x1ZGVkMyk7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVBcmcoX2V4dGVuZHMoe1xuICAgICAgICAgICAgdGhlbWU6IGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0XG4gICAgICAgICAgfSwgb3RoZXIpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcblxuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NvbXBvbmVudFNsb3QgfHwgJyd9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgU3R5bGVkKCR7Z2V0RGlzcGxheU5hbWUodGFnKX0pYDtcbiAgICAgICAgfVxuXG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgIH07XG5cbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4gbXVpU3R5bGVkUmVzb2x2ZXI7XG4gIH07XG59IiwiaW1wb3J0IHsgY3JlYXRlU3R5bGVkLCBzaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuZXhwb3J0IGNvbnN0IHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHByb3AgPT4gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnO1xuZXhwb3J0IGNvbnN0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKHtcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsIi8qKiBAbGljZW5zZSBNVUkgdjUuMTAuMVxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGVtU3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSBlbVN0eWxlZCh0YWcsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG5cbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5cbmV4cG9ydCBjb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydCB7IFRoZW1lQ29udGV4dCwga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnLi9TdHlsZWRFbmdpbmVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJzsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUaGVtZSBhcyB1c2VUaGVtZVN5c3RlbSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWVTeXN0ZW0oZGVmYXVsdFRoZW1lKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW1lO1xufSIsImltcG9ydCB7IHVzZVRoZW1lUHJvcHMgYXMgc3lzdGVtVXNlVGhlbWVQcm9wcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZVxuICB9KTtcbn0iLCJpbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lXG59KSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgY29uc3QgbWVyZ2VkUHJvcHMgPSBnZXRUaGVtZVByb3BzKHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkUHJvcHM7XG59IiwiaW1wb3J0IHsgaW50ZXJuYWxfcmVzb2x2ZVByb3BzIGFzIHJlc29sdmVQcm9wcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGhlbWVQcm9wcyhwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSA9IHBhcmFtcztcblxuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcykge1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlUHJvcHModGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMsIHByb3BzKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcblxuLyoqXG4gKiBBZGQga2V5cywgdmFsdWVzIG9mIGBkZWZhdWx0UHJvcHNgIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gYHByb3BzYFxuICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRQcm9wc1xuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSByZXNvbHZlZCBwcm9wc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlUHJvcHMoZGVmYXVsdFByb3BzLCBwcm9wcykge1xuICBjb25zdCBvdXRwdXQgPSBfZXh0ZW5kcyh7fSwgcHJvcHMpO1xuXG4gIE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wcykuZm9yRWFjaChwcm9wTmFtZSA9PiB7XG4gICAgaWYgKG91dHB1dFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn0iLCJleHBvcnQgY29uc3QgcmVmbG93ID0gbm9kZSA9PiBub2RlLnNjcm9sbFRvcDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uUHJvcHMocHJvcHMsIG9wdGlvbnMpIHtcbiAgdmFyIF9zdHlsZSR0cmFuc2l0aW9uRHVyYSwgX3N0eWxlJHRyYW5zaXRpb25UaW1pO1xuXG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0LFxuICAgIGVhc2luZyxcbiAgICBzdHlsZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbjogKF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA9IHN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA6IHR5cGVvZiB0aW1lb3V0ID09PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aW1lb3V0W29wdGlvbnMubW9kZV0gfHwgMCxcbiAgICBlYXNpbmc6IChfc3R5bGUkdHJhbnNpdGlvblRpbWkgPSBzdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvblRpbWkgOiB0eXBlb2YgZWFzaW5nID09PSAnb2JqZWN0JyA/IGVhc2luZ1tvcHRpb25zLm1vZGVdIDogZWFzaW5nLFxuICAgIGRlbGF5OiBzdHlsZS50cmFuc2l0aW9uRGVsYXlcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9jYXBpdGFsaXplIGFzIGNhcGl0YWxpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7IiwiaW1wb3J0IHsgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVN2Z0ljb24nLCBzbG90KTtcbn1cbmNvbnN0IHN2Z0ljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU3ZnSWNvbicsIFsncm9vdCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JBY3Rpb24nLCAnY29sb3JFcnJvcicsICdjb2xvckRpc2FibGVkJywgJ2ZvbnRTaXplSW5oZXJpdCcsICdmb250U2l6ZVNtYWxsJywgJ2ZvbnRTaXplTWVkaXVtJywgJ2ZvbnRTaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBzdmdJY29uQ2xhc3NlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuXG5jb25zdCBTdmdJY29uUm9vdCA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU3ZnSWNvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2Bmb250U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmZvbnRTaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkcGFsZXR0ZSRvd25lclMsIF90aGVtZSRwYWxldHRlJG93bmVyUzI7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxZW0nLFxuICAgIGhlaWdodDogJzFlbScsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pLFxuICAgIGZvbnRTaXplOiB7XG4gICAgICBpbmhlcml0OiAnaW5oZXJpdCcsXG4gICAgICBzbWFsbDogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDIwKSxcbiAgICAgIG1lZGl1bTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDI0KSxcbiAgICAgIGxhcmdlOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMzUpXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3RoZW1lJHBhbGV0dGUkb3duZXJTID0gKF90aGVtZSRwYWxldHRlJG93bmVyUzIgPSB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHBhbGV0dGUkb3duZXJTMi5tYWluKSAhPSBudWxsID8gX3RoZW1lJHBhbGV0dGUkb3duZXJTIDoge1xuICAgICAgYWN0aW9uOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWQsXG4gICAgICBpbmhlcml0OiB1bmRlZmluZWRcbiAgICB9W293bmVyU3RhdGUuY29sb3JdXG4gIH07XG59KTtcbmNvbnN0IFN2Z0ljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTdmdJY29uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcblxuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgIGZvbnRTaXplID0gJ21lZGl1bScsXG4gICAgaHRtbENvbG9yLFxuICAgIHRpdGxlQWNjZXNzLFxuICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICB9ID0gcHJvcHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICB2aWV3Qm94XG4gIH0pO1xuXG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIHZpZXdCb3g6IHZpZXdCb3gsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgdGl0bGVBY2Nlc3MgPyAvKiNfX1BVUkVfXyovX2pzeChcInRpdGxlXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0aXRsZUFjY2Vzc1xuICAgIH0pIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdmdJY29uLnByb3BUeXBlc1xuLyogcmVtb3ZlLXByb3B0eXBlcyAqL1xuPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC4gSXQgc3VwcG9ydHMgdGhvc2UgdGhlbWUgY29sb3JzIHRoYXQgbWFrZSBzZW5zZSBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgaHRtbENvbG9yYCBwcm9wIHRvIGFwcGx5IGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzXG4gIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi9cbiAgLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG5cbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXNcbiAgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqL1xuICAub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2xhcmdlJywgJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcblxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcbi8qKlxuICogUHJpdmF0ZSBtb2R1bGUgcmVzZXJ2ZWQgZm9yIEBtdWkgcGFja2FnZXMuXG4gKi9cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgY29uc3QgQ29tcG9uZW50ID0gKHByb3BzLCByZWYpID0+IC8qI19fUFVSRV9fKi9fanN4KFN2Z0ljb24sIF9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdGlkXCI6IGAke2Rpc3BsYXlOYW1lfUljb25gLFxuICAgIHJlZjogcmVmXG4gIH0sIHByb3BzLCB7XG4gICAgY2hpbGRyZW46IHBhdGhcbiAgfSkpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuXG4gIENvbXBvbmVudC5tdWlOYW1lID0gU3ZnSWNvbi5tdWlOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKENvbXBvbmVudCkpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2NyZWF0ZUNoYWluZWRGdW5jdGlvbiBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZGVib3VuY2U7IiwiLy8gQ29ycmVzcG9uZHMgdG8gMTAgZnJhbWVzIGF0IDYwIEh6LlxuLy8gQSBmZXcgYnl0ZXMgcGF5bG9hZCBvdmVyaGVhZCB3aGVuIGxvZGFzaC9kZWJvdW5jZSBpcyB+MyBrQiBhbmQgZGVib3VuY2UgfjMwMCBCLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCA9IDE2Nikge1xuICBsZXQgdGltZW91dDtcblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoLi4uYXJncykge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgfVxuXG4gIGRlYm91bmNlZC5jbGVhciA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH07XG5cbiAgcmV0dXJuIGRlYm91bmNlZDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9kZXByZWNhdGVkUHJvcFR5cGUgYXMgZGVwcmVjYXRlZFByb3BUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBkZXByZWNhdGVkUHJvcFR5cGU7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVwcmVjYXRlZFByb3BUeXBlKHZhbGlkYXRvciwgcmVhc29uKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cblxuICByZXR1cm4gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWVTYWZlID0gY29tcG9uZW50TmFtZSB8fCAnPDxhbm9ueW1vdXM+Pic7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHNbcHJvcE5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlICR7bG9jYXRpb259IFxcYCR7cHJvcEZ1bGxOYW1lU2FmZX1cXGAgb2YgYCArIGBcXGAke2NvbXBvbmVudE5hbWVTYWZlfVxcYCBpcyBkZXByZWNhdGVkLiAke3JlYXNvbn1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJXaW5kb3cgYXMgb3duZXJXaW5kb3cgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyIsImltcG9ydCB7IHVuc3RhYmxlX3JlcXVpcmVQcm9wRmFjdG9yeSBhcyByZXF1aXJlUHJvcEZhY3RvcnkgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHJlcXVpcmVQcm9wRmFjdG9yeTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVQcm9wRmFjdG9yeShjb21wb25lbnROYW1lSW5FcnJvciwgQ29tcG9uZW50KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2ZvcmJpZC1mb3JlaWduLXByb3AtdHlwZXNcblxuXG4gIGNvbnN0IHByZXZQcm9wVHlwZXMgPSBDb21wb25lbnQgPyBfZXh0ZW5kcyh7fSwgQ29tcG9uZW50LnByb3BUeXBlcykgOiBudWxsO1xuXG4gIGNvbnN0IHJlcXVpcmVQcm9wID0gcmVxdWlyZWRQcm9wID0+IChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICAgIGNvbnN0IGRlZmF1bHRUeXBlQ2hlY2tlciA9IHByZXZQcm9wVHlwZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZQcm9wVHlwZXNbcHJvcEZ1bGxOYW1lU2FmZV07XG5cbiAgICBpZiAoZGVmYXVsdFR5cGVDaGVja2VyKSB7XG4gICAgICBjb25zdCB0eXBlQ2hlY2tlclJlc3VsdCA9IGRlZmF1bHRUeXBlQ2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIC4uLmFyZ3MpO1xuXG4gICAgICBpZiAodHlwZUNoZWNrZXJSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVDaGVja2VyUmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHNbcHJvcE5hbWVdICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvcHNbcmVxdWlyZWRQcm9wXSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlIHByb3AgXFxgJHtwcm9wRnVsbE5hbWVTYWZlfVxcYCBvZiBgICsgYFxcYCR7Y29tcG9uZW50TmFtZUluRXJyb3J9XFxgIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgXFxgJHtyZXF1aXJlZFByb3B9XFxgIHByb3AuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIHJlcXVpcmVQcm9wO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHNldFJlZjsiLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSWQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfdW5zdXBwb3J0ZWRQcm9wIGFzIHVuc3VwcG9ydGVkUHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdW5zdXBwb3J0ZWRQcm9wOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuc3VwcG9ydGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHByb3BGdWxsTmFtZVNhZmUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1twcm9wTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgVGhlIHByb3AgXFxgJHtwcm9wRnVsbE5hbWVTYWZlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmVtb3ZlIGl0LmApO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlQ29udHJvbGxlZCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VDb250cm9sbGVkOyIsIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlICR7aXNDb250cm9sbGVkID8gJycgOiAndW4nfWNvbnRyb2xsZWQgJHtzdGF0ZX0gc3RhdGUgb2YgJHtuYW1lfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLmAsICdFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4nLCBgRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAke25hbWV9IGAgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuJywgXCJUaGUgbmF0dXJlIG9mIHRoZSBzdGF0ZSBpcyBkZXRlcm1pbmVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBJdCdzIGNvbnNpZGVyZWQgY29udHJvbGxlZCBpZiB0aGUgdmFsdWUgaXMgbm90IGB1bmRlZmluZWRgLlwiLCAnTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cyddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbc3RhdGUsIG5hbWUsIGNvbnRyb2xsZWRdKTtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICB9ID0gUmVhY3QudXNlUmVmKGRlZmF1bHRQcm9wKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc0NvbnRyb2xsZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBkZWZhdWx0UHJvcCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCAke3N0YXRlfSBzdGF0ZSBvZiBhbiB1bmNvbnRyb2xsZWQgJHtuYW1lfSBhZnRlciBiZWluZyBpbml0aWFsaXplZC4gYCArIGBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgb3B0IHRvIHVzZSBhIGNvbnRyb2xsZWQgJHtuYW1lfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW0pTT04uc3RyaW5naWZ5KGRlZmF1bHRQcm9wKV0pO1xuICB9XG5cbiAgY29uc3Qgc2V0VmFsdWVJZlVuY29udHJvbGxlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKG5ld1ZhbHVlID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfSwgW10pO1xuICByZXR1cm4gW3ZhbHVlLCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkXTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9pc011aUVsZW1lbnQgYXMgaXNNdWlFbGVtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNdWlFbGVtZW50KGVsZW1lbnQsIG11aU5hbWVzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZihlbGVtZW50LnR5cGUubXVpTmFtZSkgIT09IC0xO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZEVmZmVjdDsiLCJpbXBvcnQgeyB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JrUmVmOyIsIi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi92NC4xLjUvc3JjL2ZvY3VzLXZpc2libGUuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xubGV0IGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dDtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG4vKipcbiAqIENvbXB1dGVzIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciB0aGVcbiAqIGBmb2N1cy12aXNpYmxlYCBjbGFzcyBiZWluZyBhZGRlZCwgaS5lLiB3aGV0aGVyIGl0IHNob3VsZCBhbHdheXMgbWF0Y2hcbiAqIGA6Zm9jdXMtdmlzaWJsZWAgd2hlbiBmb2N1c2VkLlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG5cbiAgaWYgKHRhZ05hbWUgPT09ICdJTlBVVCcgJiYgaW5wdXRUeXBlc1doaXRlbGlzdFt0eXBlXSAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHRhZ05hbWUgPT09ICdURVhUQVJFQScgJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG4vKipcbiAqIElmIGF0IGFueSBwb2ludCBhIHVzZXIgY2xpY2tzIHdpdGggYSBwb2ludGluZyBkZXZpY2UsIGVuc3VyZSB0aGF0IHdlIGNoYW5nZVxuICogdGhlIG1vZGFsaXR5IGF3YXkgZnJvbSBrZXlib2FyZC5cbiAqIFRoaXMgYXZvaWRzIHRoZSBzaXR1YXRpb24gd2hlcmUgYSB1c2VyIHByZXNzZXMgYSBrZXkgb24gYW4gYWxyZWFkeSBmb2N1c2VkXG4gKiBlbGVtZW50LCBhbmQgdGhlbiBjbGlja3Mgb24gYSBkaWZmZXJlbnQgZWxlbWVudCwgZm9jdXNpbmcgaXQgd2l0aCBhXG4gKiBwb2ludGluZyBkZXZpY2UsIHdoaWxlIHdlIHN0aWxsIHRoaW5rIHdlJ3JlIGluIGtleWJvYXJkIG1vZGFsaXR5LlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUG9pbnRlckRvd24oKSB7XG4gIGhhZEtleWJvYXJkRXZlbnQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgaWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgIC8vIElmIHRoZSB0YWIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGNhbGxpbmcgZm9jdXNcbiAgICAvLyBvbiB0aGUgZWxlbWVudCAoU2FmYXJpIGFjdHVhbGx5IGNhbGxzIGl0IHR3aWNlKS5cbiAgICAvLyBJZiB0aGlzIHRhYiBjaGFuZ2UgY2F1c2VkIGEgYmx1ciBvbiBhbiBlbGVtZW50IHdpdGggZm9jdXMtdmlzaWJsZSxcbiAgICAvLyByZS1hcHBseSB0aGUgY2xhc3Mgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB0YWIuXG4gICAgaWYgKGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5KSB7XG4gICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlYXJkb3duKGRvYykge1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBpc0ZvY3VzVmlzaWJsZShldmVudCkge1xuICBjb25zdCB7XG4gICAgdGFyZ2V0XG4gIH0gPSBldmVudDtcblxuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH0gLy8gTm8gbmVlZCBmb3IgdmFsaWRGb2N1c1RhcmdldCBjaGVjay4gVGhlIHVzZXIgZG9lcyB0aGF0IGJ5IGF0dGFjaGluZyBpdCB0b1xuICAvLyBmb2N1c2FibGUgZXZlbnRzIG9ubHkuXG5cblxuICByZXR1cm4gaGFkS2V5Ym9hcmRFdmVudCB8fCBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eSh0YXJnZXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJc0ZvY3VzVmlzaWJsZSgpIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgcHJlcGFyZShub2RlLm93bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBpc0ZvY3VzVmlzaWJsZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8qKlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGlmIGEgYmx1ciBldmVudCBpcyBmaXJlZFxuICAgKi9cblxuICBmdW5jdGlvbiBoYW5kbGVCbHVyVmlzaWJsZSgpIHtcbiAgICAvLyBjaGVja2luZyBhZ2FpbnN0IHBvdGVudGlhbCBzdGF0ZSB2YXJpYWJsZSBkb2VzIG5vdCBzdWZmaWNlIGlmIHdlIGZvY3VzIGFuZCBibHVyIHN5bmNocm9ub3VzbHkuXG4gICAgLy8gUmVhY3Qgd291bGRuJ3QgaGF2ZSB0aW1lIHRvIHRyaWdnZXIgYSByZS1yZW5kZXIgc28gYGZvY3VzVmlzaWJsZWAgd291bGQgYmUgc3RhbGUuXG4gICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBhZGp1c3QgYGlzRm9jdXNWaXNpYmxlKGV2ZW50KWAgdG8gbG9vayBhdCBgcmVsYXRlZFRhcmdldGAgZm9yIGJsdXIgZXZlbnRzLlxuICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIGluIElFMTEgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzc1MVxuICAgIC8vIFRPRE86IGNoZWNrIGFnYWluIGlmIFJlYWN0IHJlbGVhc2VzIHRoZWlyIGludGVybmFsIGNoYW5nZXMgdG8gZm9jdXMgZXZlbnQgaGFuZGxpbmcgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MTg2KS5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCkge1xuICAgICAgLy8gVG8gZGV0ZWN0IGEgdGFiL3dpbmRvdyBzd2l0Y2gsIHdlIGxvb2sgZm9yIGEgYmx1ciBldmVudCBmb2xsb3dlZFxuICAgICAgLy8gcmFwaWRseSBieSBhIHZpc2liaWxpdHkgY2hhbmdlLlxuICAgICAgLy8gSWYgd2UgZG9uJ3Qgc2VlIGEgdmlzaWJpbGl0eSBjaGFuZ2Ugd2l0aGluIDEwMG1zLCBpdCdzIHByb2JhYmx5IGFcbiAgICAgIC8vIHJlZ3VsYXIgZm9jdXMgY2hhbmdlLlxuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQpO1xuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpIHtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGUoZXZlbnQpKSB7XG4gICAgICBpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmXG4gIH07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfdXNlSXNGb2N1c1Zpc2libGUgYXMgdXNlSXNGb2N1c1Zpc2libGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGhlbWVDb250ZXh0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGhlbWVDb250ZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi9UaGVtZUNvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cblxuICByZXR1cm4gdGhlbWU7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnOyAvLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cblxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGNhY2hlID0gY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnLFxuICBwcmVwZW5kOiB0cnVlXG59KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN0eWxlZEVuZ2luZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpbmplY3RGaXJzdCxcbiAgICBjaGlsZHJlblxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBpbmplY3RGaXJzdCA/IC8qI19fUFVSRV9fKi9fanN4KENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pIDogY2hpbGRyZW47XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdHlsZWRFbmdpbmVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc3R5bGVzIGFyZSBpbmplY3RlZCBsYXN0IGluIHRoZSA8aGVhZD4gZWxlbWVudCBvZiB0aGUgcGFnZS5cbiAgICogQXMgYSByZXN1bHQsIHRoZXkgZ2FpbiBtb3JlIHNwZWNpZmljaXR5IHRoYW4gYW55IG90aGVyIHN0eWxlIHNoZWV0LlxuICAgKiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSBNVUkncyBzdHlsZXMsIHNldCB0aGlzIHByb3AuXG4gICAqL1xuICBpbmplY3RGaXJzdDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7IiwiY29uc3QgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuZXhwb3J0IGRlZmF1bHQgaGFzU3ltYm9sID8gU3ltYm9sLmZvcignbXVpLm5lc3RlZCcpIDogJ19fVEhFTUVfTkVTVEVEX18nOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuLi91c2VUaGVtZS9UaGVtZUNvbnRleHQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmltcG9ydCBuZXN0ZWQgZnJvbSAnLi9uZXN0ZWQnOyAvLyBUbyBzdXBwb3J0IGNvbXBvc2l0aW9uIG9mIHRoZW1lLlxuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZFRoZW1lID0gbG9jYWxUaGVtZShvdXRlclRoZW1lKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIW1lcmdlZFRoZW1lKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHlvdXIgdGhlbWUgZnVuY3Rpb24sIGkuZS4nLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9eygpID0+ICh7fSl9IC8+J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG59XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHRha2VzIGEgYHRoZW1lYCBwcm9wLlxuICogSXQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUgdGhhbmtzIHRvIFJlYWN0IGNvbnRleHQuXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICovXG5cblxuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgdGhlbWU6IGxvY2FsVGhlbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvdXRlclRoZW1lID0gdXNlVGhlbWUoKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChvdXRlclRoZW1lID09PSBudWxsICYmIHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhIHRoZW1lIGZ1bmN0aW9uIHByb3AgdG8gdGhlIFRoZW1lUHJvdmlkZXIgY29tcG9uZW50OicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17b3V0ZXJUaGVtZSA9PiBvdXRlclRoZW1lfSAvPicsICcnLCAnSG93ZXZlciwgbm8gb3V0ZXIgdGhlbWUgaXMgcHJlc2VudC4nLCAnTWFrZSBzdXJlIGEgdGhlbWUgaXMgYWxyZWFkeSBpbmplY3RlZCBoaWdoZXIgaW4gdGhlIFJlYWN0IHRyZWUgJyArICdvciBwcm92aWRlIGEgdGhlbWUgb2JqZWN0LiddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IG91dGVyVGhlbWUgPT09IG51bGwgPyBsb2NhbFRoZW1lIDogbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG5cbiAgICBpZiAob3V0cHV0ICE9IG51bGwpIHtcbiAgICAgIG91dHB1dFtuZXN0ZWRdID0gb3V0ZXJUaGVtZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbbG9jYWxUaGVtZSwgb3V0ZXJUaGVtZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn1cblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGhlbWVQcm92aWRlcjsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciBhcyBNdWlUaGVtZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9wcml2YXRlLXRoZW1pbmcnO1xuaW1wb3J0IHsgZXhhY3RQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgYXMgU3R5bGVkRW5naW5lVGhlbWVDb250ZXh0IH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuXG5mdW5jdGlvbiBJbm5lclRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3R5bGVkRW5naW5lVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHR5cGVvZiB0aGVtZSA9PT0gJ29iamVjdCcgPyB0aGVtZSA6IHt9LFxuICAgIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlblxuICB9KTtcbn1cblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5uZXJUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn0gOiB2b2lkIDA7XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IG1ha2VzIHRoZSBgdGhlbWVgIGF2YWlsYWJsZSBkb3duIHRoZSBSZWFjdCB0cmVlLlxuICogSXQgc2hvdWxkIHByZWZlcmFibHkgYmUgdXNlZCBhdCAqKnRoZSByb290IG9mIHlvdXIgY29tcG9uZW50IHRyZWUqKi5cbiAqL1xuXG5mdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aGVtZTogbG9jYWxUaGVtZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNdWlUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IGxvY2FsVGhlbWUsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KElubmVyVGhlbWVQcm92aWRlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSlcbiAgfSk7XG59XG5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzXG4vKiByZW1vdmUtcHJvcHR5cGVzICovXG49IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSBleGFjdFByb3AoVGhlbWVQcm92aWRlci5wcm9wVHlwZXMpIDogdm9pZCAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaGVtZVByb3ZpZGVyOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnOyAvLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cblxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpIHtcbiAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIGNvbnN0IG5ld1N0eWxlRnVuY3Rpb24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgICBjb25zdCBiYXNlID0gc3R5bGVGdW5jdGlvbihwcm9wcyk7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICBjb25zdCBleHRlbmRlZCA9IHRoZW1lQnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5XSkge1xuICAgICAgICBhY2MgPSBhY2MgfHwge307XG4gICAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKGtleSldID0gc3R5bGVGdW5jdGlvbihfZXh0ZW5kcyh7XG4gICAgICAgICAgdGhlbWVcbiAgICAgICAgfSwgcHJvcHNba2V5XSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG51bGwpO1xuICAgIHJldHVybiBtZXJnZShiYXNlLCBleHRlbmRlZCk7XG4gIH07XG5cbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCA9IHt9KSB7XG4gIHZhciBfYnJlYWtwb2ludHNJbnB1dCRrZXk7XG5cbiAgY29uc3QgYnJlYWtwb2ludHNJbk9yZGVyID0gKF9icmVha3BvaW50c0lucHV0JGtleSA9IGJyZWFrcG9pbnRzSW5wdXQua2V5cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9icmVha3BvaW50c0lucHV0JGtleS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludFN0eWxlS2V5ID0gYnJlYWtwb2ludHNJbnB1dC51cChrZXkpO1xuICAgIGFjY1ticmVha3BvaW50U3R5bGVLZXldID0ge307XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gYnJlYWtwb2ludHNJbk9yZGVyIHx8IHt9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRLZXlzLCBzdHlsZSkge1xuICByZXR1cm4gYnJlYWtwb2ludEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRPdXRwdXQgPSBhY2Nba2V5XTtcbiAgICBjb25zdCBpc0JyZWFrcG9pbnRVbnVzZWQgPSAhYnJlYWtwb2ludE91dHB1dCB8fCBPYmplY3Qua2V5cyhicmVha3BvaW50T3V0cHV0KS5sZW5ndGggPT09IDA7XG5cbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKGJyZWFrcG9pbnRzSW5wdXQsIC4uLnN0eWxlcykge1xuICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBbZW1wdHlCcmVha3BvaW50cywgLi4uc3R5bGVzXS5yZWR1Y2UoKHByZXYsIG5leHQpID0+IGRlZXBtZXJnZShwcmV2LCBuZXh0KSwge30pO1xuICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyksIG1lcmdlZE91dHB1dCk7XG59IC8vIGNvbXB1dGUgYmFzZSBmb3IgcmVzcG9uc2l2ZSB2YWx1ZXM7IGUuZy4sXG4vLyBbMSwyLDNdID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuLy8ge3hzOiAxLCBzbTogMiwgbWQ6IDN9ID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKSB7XG4gIC8vIGZpeGVkIHZhbHVlXG4gIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJhc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuXG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1tpXSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1tpXSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGJyZWFrcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZXhwb3J0IGRlZmF1bHQgYnJlYWtwb2ludHM7IiwiaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuXG4vKipcbiAqIFJldHVybnMgYSBudW1iZXIgd2hvc2UgdmFsdWUgaXMgbGltaXRlZCB0byB0aGUgZ2l2ZW4gcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGNsYW1wZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggVGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgbnVtYmVyIGluIHRoZSByYW5nZSBbbWluLCBtYXhdXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobWluLCB2YWx1ZSksIG1heCk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgaGV4IGZvcm1hdCB0byBDU1MgcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhleCBjb2xvciwgaS5lLiAjbm5uIG9yICNubm5ubm5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmdcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGNvbG9yLnNsaWNlKDEpO1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYC57MSwke2NvbG9yLmxlbmd0aCA+PSA2ID8gMiA6IDF9fWAsICdnJyk7XG4gIGxldCBjb2xvcnMgPSBjb2xvci5tYXRjaChyZSk7XG5cbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuXG4gIHJldHVybiBjb2xvcnMgPyBgcmdiJHtjb2xvcnMubGVuZ3RoID09PSA0ID8gJ2EnIDogJyd9KCR7Y29sb3JzLm1hcCgobiwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXggPCAzID8gcGFyc2VJbnQobiwgMTYpIDogTWF0aC5yb3VuZChwYXJzZUludChuLCAxNikgLyAyNTUgKiAxMDAwKSAvIDEwMDA7XG4gIH0pLmpvaW4oJywgJyl9KWAgOiAnJztcbn1cblxuZnVuY3Rpb24gaW50VG9IZXgoaW50KSB7XG4gIGNvbnN0IGhleCA9IGludC50b1N0cmluZygxNik7XG4gIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gYDAke2hleH1gIDogaGV4O1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSB0eXBlIGFuZCB2YWx1ZXMgb2YgYSBjb2xvci5cbiAqXG4gKiBOb3RlOiBEb2VzIG5vdCBzdXBwb3J0IHJnYiAlIHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gQSBNVUkgY29sb3Igb2JqZWN0OiB7dHlwZTogc3RyaW5nLCB2YWx1ZXM6IG51bWJlcltdfVxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLnR5cGUpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlciA9IGNvbG9yLmluZGV4T2YoJygnKTtcbiAgY29uc3QgdHlwZSA9IGNvbG9yLnN1YnN0cmluZygwLCBtYXJrZXIpO1xuXG4gIGlmIChbJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ10uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVW5zdXBwb3J0ZWQgXFxgJHtjb2xvcn1cXGAgY29sb3IuXG5UaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSg5LCBjb2xvcikpO1xuICB9XG5cbiAgbGV0IHZhbHVlcyA9IGNvbG9yLnN1YnN0cmluZyhtYXJrZXIgKyAxLCBjb2xvci5sZW5ndGggLSAxKTtcbiAgbGV0IGNvbG9yU3BhY2U7XG5cbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gNCAmJiB2YWx1ZXNbM10uY2hhckF0KDApID09PSAnLycpIHtcbiAgICAgIHZhbHVlc1szXSA9IHZhbHVlc1szXS5zbGljZSgxKTtcbiAgICB9XG5cbiAgICBpZiAoWydzcmdiJywgJ2Rpc3BsYXktcDMnLCAnYTk4LXJnYicsICdwcm9waG90by1yZ2InLCAncmVjLTIwMjAnXS5pbmRleE9mKGNvbG9yU3BhY2UpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IHVuc3VwcG9ydGVkIFxcYCR7Y29sb3JTcGFjZX1cXGAgY29sb3Igc3BhY2UuXG5UaGUgZm9sbG93aW5nIGNvbG9yIHNwYWNlcyBhcmUgc3VwcG9ydGVkOiBzcmdiLCBkaXNwbGF5LXAzLCBhOTgtcmdiLCBwcm9waG90by1yZ2IsIHJlYy0yMDIwLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEwLCBjb2xvclNwYWNlKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IHZhbHVlcy5zcGxpdCgnLCcpO1xuICB9XG5cbiAgdmFsdWVzID0gdmFsdWVzLm1hcCh2YWx1ZSA9PiBwYXJzZUZsb2F0KHZhbHVlKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXMsXG4gICAgY29sb3JTcGFjZVxuICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgY2hhbm5lbCBjcmVhdGVkIGZyb20gdGhlIGlucHV0IGNvbG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGNoYW5uZWwgZm9yIHRoZSBjb2xvciwgdGhhdCBjYW4gYmUgdXNlZCBpbiByZ2JhIG9yIGhzbGEgY29sb3JzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGNvbG9yQ2hhbm5lbCA9IGNvbG9yID0+IHtcbiAgY29uc3QgZGVjb21wb3NlZENvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gZGVjb21wb3NlZENvbG9yLnZhbHVlcy5zbGljZSgwLCAzKS5tYXAoKHZhbCwgaWR4KSA9PiBkZWNvbXBvc2VkQ29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEgJiYgaWR4ICE9PSAwID8gYCR7dmFsfSVgIDogdmFsKS5qb2luKCcgJyk7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIG9iamVjdCB3aXRoIHR5cGUgYW5kIHZhbHVlcyB0byBhIHN0cmluZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2xvciAtIERlY29tcG9zZWQgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvci50eXBlIC0gT25lIG9mOiAncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXG4gKiBAcGFyYW0ge2FycmF5fSBjb2xvci52YWx1ZXMgLSBbbixuLG5dIG9yIFtuLG4sbixuXVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG5cbiAgaWYgKHR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgLy8gT25seSBjb252ZXJ0IHRoZSBmaXJzdCAzIHZhbHVlcyB0byBpbnQgKGkuZS4gbm90IGFscGhhKVxuICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoKG4sIGkpID0+IGkgPCAzID8gcGFyc2VJbnQobiwgMTApIDogbik7XG4gIH0gZWxzZSBpZiAodHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXNbMV0gPSBgJHt2YWx1ZXNbMV19JWA7XG4gICAgdmFsdWVzWzJdID0gYCR7dmFsdWVzWzJdfSVgO1xuICB9XG5cbiAgaWYgKHR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXMgPSBgJHtjb2xvclNwYWNlfSAke3ZhbHVlcy5qb2luKCcgJyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSBgJHt2YWx1ZXMuam9pbignLCAnKX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIHJnYiBmb3JtYXQgdG8gQ1NTIGhleCBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBSR0IgY29sb3IsIGkuZS4gcmdiKG4sIG4sIG4pXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nLCBpLmUuICNubm5ubm5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmdiVG9IZXgoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IuaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBoc2wgZm9ybWF0IHRvIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIU0wgY29sb3IgdmFsdWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZ2IgY29sb3IgdmFsdWVzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcbiAgY29uc3QgaCA9IHZhbHVlc1swXTtcbiAgY29uc3QgcyA9IHZhbHVlc1sxXSAvIDEwMDtcbiAgY29uc3QgbCA9IHZhbHVlc1syXSAvIDEwMDtcbiAgY29uc3QgYSA9IHMgKiBNYXRoLm1pbihsLCAxIC0gbCk7XG5cbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuXG4gIGxldCB0eXBlID0gJ3JnYic7XG4gIGNvbnN0IHJnYiA9IFtNYXRoLnJvdW5kKGYoMCkgKiAyNTUpLCBNYXRoLnJvdW5kKGYoOCkgKiAyNTUpLCBNYXRoLnJvdW5kKGYoNCkgKiAyNTUpXTtcblxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgdHlwZSArPSAnYSc7XG4gICAgcmdiLnB1c2godmFsdWVzWzNdKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnID8gZGVjb21wb3NlQ29sb3IoaHNsVG9SZ2IoY29sb3IpKS52YWx1ZXMgOiBjb2xvci52YWx1ZXM7XG4gIHJnYiA9IHJnYi5tYXAodmFsID0+IHtcbiAgICBpZiAoY29sb3IudHlwZSAhPT0gJ2NvbG9yJykge1xuICAgICAgdmFsIC89IDI1NTsgLy8gbm9ybWFsaXplZFxuICAgIH1cblxuICAgIHJldHVybiB2YWwgPD0gMC4wMzkyOCA/IHZhbCAvIDEyLjkyIDogKCh2YWwgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40O1xuICB9KTsgLy8gVHJ1bmNhdGUgYXQgMyBkaWdpdHNcblxuICByZXR1cm4gTnVtYmVyKCgwLjIxMjYgKiByZ2JbMF0gKyAwLjcxNTIgKiByZ2JbMV0gKyAwLjA3MjIgKiByZ2JbMl0pLnRvRml4ZWQoMykpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBjb250cmFzdCByYXRpbyBiZXR3ZWVuIHR3byBjb2xvcnMuXG4gKlxuICogRm9ybXVsYTogaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9HMTcuaHRtbCNHMTctdGVzdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JlZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBBIGNvbnRyYXN0IHJhdGlvIHZhbHVlIGluIHRoZSByYW5nZSAwIC0gMjEuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyYXN0UmF0aW8oZm9yZWdyb3VuZCwgYmFja2dyb3VuZCkge1xuICBjb25zdCBsdW1BID0gZ2V0THVtaW5hbmNlKGZvcmVncm91bmQpO1xuICBjb25zdCBsdW1CID0gZ2V0THVtaW5hbmNlKGJhY2tncm91bmQpO1xuICByZXR1cm4gKE1hdGgubWF4KGx1bUEsIGx1bUIpICsgMC4wNSkgLyAoTWF0aC5taW4obHVtQSwgbHVtQikgKyAwLjA1KTtcbn1cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcCh2YWx1ZSk7XG5cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdyZ2InIHx8IGNvbG9yLnR5cGUgPT09ICdoc2wnKSB7XG4gICAgY29sb3IudHlwZSArPSAnYSc7XG4gIH1cblxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbi8qKlxuICogRGFya2VucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRhcmtlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXAoY29lZmZpY2llbnQpO1xuXG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXAoY29lZmZpY2llbnQpO1xuXG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSArPSAoMTAwIC0gY29sb3IudmFsdWVzWzJdKSAqIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMjU1IC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuLyoqXG4gKiBEYXJrZW4gb3IgbGlnaHRlbiBhIGNvbG9yLCBkZXBlbmRpbmcgb24gaXRzIGx1bWluYW5jZS5cbiAqIExpZ2h0IGNvbG9ycyBhcmUgZGFya2VuZWQsIGRhcmsgY29sb3JzIGFyZSBsaWdodGVuZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQ9MC4xNSAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50ID0gMC4xNSkge1xuICByZXR1cm4gZ2V0THVtaW5hbmNlKGNvbG9yKSA+IDAuNSA/IGRhcmtlbihjb2xvciwgY29lZmZpY2llbnQpIDogbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmV4cG9ydCBjb25zdCBicmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcblxuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdOyAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYWNjLCB7XG4gICAgICBbb2JqLmtleV06IG9iai52YWxcbiAgICB9KTtcbiAgfSwge30pO1xufTsgLy8gS2VlcCBpbiBtaW5kIHRoYXQgQG1lZGlhIGlzIGluY2x1c2l2ZSBieSB0aGUgQ1NTIHNwZWNpZmljYXRpb24uXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgIC8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtKS5cbiAgICB2YWx1ZXMgPSB7XG4gICAgICB4czogMCxcbiAgICAgIC8vIHBob25lXG4gICAgICBzbTogNjAwLFxuICAgICAgLy8gdGFibGV0XG4gICAgICBtZDogOTAwLFxuICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICBsZzogMTIwMCxcbiAgICAgIC8vIGRlc2t0b3BcbiAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuXG4gICAgfSxcbiAgICB1bml0ID0gJ3B4JyxcbiAgICBzdGVwID0gNVxuICB9ID0gYnJlYWtwb2ludHMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuXG4gIGZ1bmN0aW9uIHVwKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZX0ke3VuaXR9KWA7XG4gIH1cblxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG5cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cblxuICBmdW5jdGlvbiBvbmx5KGtleSkge1xuICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSArIDEgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pO1xuICAgIH1cblxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG5cbiAgICBpZiAoa2V5SW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB1cChrZXlzWzFdKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cblxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJwYWxldHRlXCIsIFwic3BhY2luZ1wiLCBcInNoYXBlXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgY3JlYXRlQnJlYWtwb2ludHMgZnJvbSAnLi9jcmVhdGVCcmVha3BvaW50cyc7XG5pbXBvcnQgc2hhcGUgZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgY3JlYXRlU3BhY2luZyBmcm9tICcuL2NyZWF0ZVNwYWNpbmcnO1xuXG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50c0lucHV0ID0ge30sXG4gICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgIHNoYXBlOiBzaGFwZUlucHV0ID0ge31cbiAgfSA9IG9wdGlvbnMsXG4gICAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwiaW1wb3J0IHsgY3JlYXRlVW5hcnlTcGFjaW5nIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5cbi8qIHRzbGludDplbmFibGU6dW5pZmllZC1zaWduYXR1cmVzICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9IC8vIE1hdGVyaWFsIERlc2lnbiBsYXlvdXRzIGFyZSB2aXN1YWxseSBiYWxhbmNlZC4gTW9zdCBtZWFzdXJlbWVudHMgYWxpZ24gdG8gYW4gOGRwIGdyaWQsIHdoaWNoIGFsaWducyBib3RoIHNwYWNpbmcgYW5kIHRoZSBvdmVyYWxsIGxheW91dC5cbiAgLy8gU21hbGxlciBjb21wb25lbnRzLCBzdWNoIGFzIGljb25zLCBjYW4gYWxpZ24gdG8gYSA0ZHAgZ3JpZC5cbiAgLy8gaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vbGF5b3V0L3VuZGVyc3RhbmRpbmctbGF5b3V0Lmh0bWwjdXNhZ2VcblxuXG4gIGNvbnN0IHRyYW5zZm9ybSA9IGNyZWF0ZVVuYXJ5U3BhY2luZyh7XG4gICAgc3BhY2luZzogc3BhY2luZ0lucHV0XG4gIH0pO1xuXG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuXG4gIHNwYWNpbmcubXVpID0gdHJ1ZTtcbiAgcmV0dXJuIHNwYWNpbmc7XG59IiwiaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuXG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfTtcblxuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHN0eWxlLnByb3BUeXBlcyksIHt9KSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IGFjYy5jb25jYXQoc3R5bGUuZmlsdGVyUHJvcHMpLCBbXSk7XG4gIHJldHVybiBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmZ1bmN0aW9uIGdldEJvcmRlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXInLFxuICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICB0cmFuc2Zvcm06IGdldEJvcmRlclxufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyVG9wJyxcbiAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgdHJhbnNmb3JtOiBnZXRCb3JkZXJcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyUmlnaHQnLFxuICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICB0cmFuc2Zvcm06IGdldEJvcmRlclxufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyQm90dG9tJyxcbiAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgdHJhbnNmb3JtOiBnZXRCb3JkZXJcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnQgPSBzdHlsZSh7XG4gIHByb3A6ICdib3JkZXJMZWZ0JyxcbiAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgdHJhbnNmb3JtOiBnZXRCb3JkZXJcbn0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3BDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlclRvcENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlclJpZ2h0Q29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21Db2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JvcmRlckJvdHRvbUNvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdENvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYm9yZGVyTGVmdENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJ1xufSk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzaGFwZS5ib3JkZXJSYWRpdXMnLCA0LCAnYm9yZGVyUmFkaXVzJyk7XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9IGNvbXBvc2UoYm9yZGVyLCBib3JkZXJUb3AsIGJvcmRlclJpZ2h0LCBib3JkZXJCb3R0b20sIGJvcmRlckxlZnQsIGJvcmRlckNvbG9yLCBib3JkZXJUb3BDb2xvciwgYm9yZGVyUmlnaHRDb2xvciwgYm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckxlZnRDb2xvciwgYm9yZGVyUmFkaXVzKTtcbmV4cG9ydCBkZWZhdWx0IGJvcmRlcnM7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBjb25zdCBkaXNwbGF5UHJpbnQgPSBzdHlsZSh7XG4gIHByb3A6ICdkaXNwbGF5UHJpbnQnLFxuICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgZGlzcGxheTogdmFsdWVcbiAgICB9XG4gIH0pXG59KTtcbmV4cG9ydCBjb25zdCBkaXNwbGF5UmF3ID0gc3R5bGUoe1xuICBwcm9wOiAnZGlzcGxheSdcbn0pO1xuZXhwb3J0IGNvbnN0IG92ZXJmbG93ID0gc3R5bGUoe1xuICBwcm9wOiAnb3ZlcmZsb3cnXG59KTtcbmV4cG9ydCBjb25zdCB0ZXh0T3ZlcmZsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICd0ZXh0T3ZlcmZsb3cnXG59KTtcbmV4cG9ydCBjb25zdCB2aXNpYmlsaXR5ID0gc3R5bGUoe1xuICBwcm9wOiAndmlzaWJpbGl0eSdcbn0pO1xuZXhwb3J0IGNvbnN0IHdoaXRlU3BhY2UgPSBzdHlsZSh7XG4gIHByb3A6ICd3aGl0ZVNwYWNlJ1xufSk7XG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKGRpc3BsYXlQcmludCwgZGlzcGxheVJhdywgb3ZlcmZsb3csIHRleHRPdmVyZmxvdywgdmlzaWJpbGl0eSwgd2hpdGVTcGFjZSk7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBjb25zdCBmbGV4QmFzaXMgPSBzdHlsZSh7XG4gIHByb3A6ICdmbGV4QmFzaXMnXG59KTtcbmV4cG9ydCBjb25zdCBmbGV4RGlyZWN0aW9uID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleERpcmVjdGlvbidcbn0pO1xuZXhwb3J0IGNvbnN0IGZsZXhXcmFwID0gc3R5bGUoe1xuICBwcm9wOiAnZmxleFdyYXAnXG59KTtcbmV4cG9ydCBjb25zdCBqdXN0aWZ5Q29udGVudCA9IHN0eWxlKHtcbiAgcHJvcDogJ2p1c3RpZnlDb250ZW50J1xufSk7XG5leHBvcnQgY29uc3QgYWxpZ25JdGVtcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2FsaWduSXRlbXMnXG59KTtcbmV4cG9ydCBjb25zdCBhbGlnbkNvbnRlbnQgPSBzdHlsZSh7XG4gIHByb3A6ICdhbGlnbkNvbnRlbnQnXG59KTtcbmV4cG9ydCBjb25zdCBvcmRlciA9IHN0eWxlKHtcbiAgcHJvcDogJ29yZGVyJ1xufSk7XG5leHBvcnQgY29uc3QgZmxleCA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXgnXG59KTtcbmV4cG9ydCBjb25zdCBmbGV4R3JvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXhHcm93J1xufSk7XG5leHBvcnQgY29uc3QgZmxleFNocmluayA9IHN0eWxlKHtcbiAgcHJvcDogJ2ZsZXhTaHJpbmsnXG59KTtcbmV4cG9ydCBjb25zdCBhbGlnblNlbGYgPSBzdHlsZSh7XG4gIHByb3A6ICdhbGlnblNlbGYnXG59KTtcbmV4cG9ydCBjb25zdCBqdXN0aWZ5SXRlbXMgPSBzdHlsZSh7XG4gIHByb3A6ICdqdXN0aWZ5SXRlbXMnXG59KTtcbmV4cG9ydCBjb25zdCBqdXN0aWZ5U2VsZiA9IHN0eWxlKHtcbiAgcHJvcDogJ2p1c3RpZnlTZWxmJ1xufSk7XG5jb25zdCBmbGV4Ym94ID0gY29tcG9zZShmbGV4QmFzaXMsIGZsZXhEaXJlY3Rpb24sIGZsZXhXcmFwLCBqdXN0aWZ5Q29udGVudCwgYWxpZ25JdGVtcywgYWxpZ25Db250ZW50LCBvcmRlciwgZmxleCwgZmxleEdyb3csIGZsZXhTaHJpbmssIGFsaWduU2VsZiwganVzdGlmeUl0ZW1zLCBqdXN0aWZ5U2VsZik7XG5leHBvcnQgZGVmYXVsdCBmbGV4Ym94OyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmV4cG9ydCBjb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG5cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuZXhwb3J0IGNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcblxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5jb2x1bW5HYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5leHBvcnQgY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ3Jvd0dhcCcpO1xuXG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmV4cG9ydCBjb25zdCBncmlkQ29sdW1uID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZENvbHVtbidcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRSb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkUm93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9GbG93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9GbG93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Db2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Db2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Sb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Sb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVSb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXJlYSA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBcmVhJ1xufSk7XG5jb25zdCBncmlkID0gY29tcG9zZShnYXAsIGNvbHVtbkdhcCwgcm93R2FwLCBncmlkQ29sdW1uLCBncmlkUm93LCBncmlkQXV0b0Zsb3csIGdyaWRBdXRvQ29sdW1ucywgZ3JpZEF1dG9Sb3dzLCBncmlkVGVtcGxhdGVDb2x1bW5zLCBncmlkVGVtcGxhdGVSb3dzLCBncmlkVGVtcGxhdGVBcmVhcywgZ3JpZEFyZWEpO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZDsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGNvbnN0IHBvc2l0aW9uID0gc3R5bGUoe1xuICBwcm9wOiAncG9zaXRpb24nXG59KTtcbmV4cG9ydCBjb25zdCB6SW5kZXggPSBzdHlsZSh7XG4gIHByb3A6ICd6SW5kZXgnLFxuICB0aGVtZUtleTogJ3pJbmRleCdcbn0pO1xuZXhwb3J0IGNvbnN0IHRvcCA9IHN0eWxlKHtcbiAgcHJvcDogJ3RvcCdcbn0pO1xuZXhwb3J0IGNvbnN0IHJpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAncmlnaHQnXG59KTtcbmV4cG9ydCBjb25zdCBib3R0b20gPSBzdHlsZSh7XG4gIHByb3A6ICdib3R0b20nXG59KTtcbmV4cG9ydCBjb25zdCBsZWZ0ID0gc3R5bGUoe1xuICBwcm9wOiAnbGVmdCdcbn0pO1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShwb3NpdGlvbiwgekluZGV4LCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgY29uc3QgY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdjb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZSdcbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnXG59KTtcbmNvbnN0IHBhbGV0dGUgPSBjb21wb3NlKGNvbG9yLCBiZ2NvbG9yLCBiYWNrZ3JvdW5kQ29sb3IpO1xuZXhwb3J0IGRlZmF1bHQgcGFsZXR0ZTsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5jb25zdCBib3hTaGFkb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdib3hTaGFkb3cnLFxuICB0aGVtZUtleTogJ3NoYWRvd3MnXG59KTtcbmV4cG9ydCBkZWZhdWx0IGJveFNoYWRvdzsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIHZhbHVlcyBhcyBicmVha3BvaW50c1ZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuXG5leHBvcnQgY29uc3Qgd2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZSRicmVha3BvaSwgX3Byb3BzJHRoZW1lJGJyZWFrcG9pMjtcblxuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgPyB2b2lkIDAgOiAoX3Byb3BzJHRoZW1lJGJyZWFrcG9pID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogKF9wcm9wcyR0aGVtZSRicmVha3BvaTIgPSBfcHJvcHMkdGhlbWUkYnJlYWtwb2kudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lJGJyZWFrcG9pMltwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4V2lkdGg6IGJyZWFrcG9pbnQgfHwgdHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmV4cG9ydCBjb25zdCBtaW5XaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heEhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21heEhlaWdodCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWluSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3Qgc2l6ZUhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYm94U2l6aW5nID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSBjb21wb3NlKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG5leHBvcnQgZGVmYXVsdCBzaXppbmc7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBjb25zdCBmb250RmFtaWx5ID0gc3R5bGUoe1xuICBwcm9wOiAnZm9udEZhbWlseScsXG4gIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbn0pO1xuZXhwb3J0IGNvbnN0IGZvbnRTaXplID0gc3R5bGUoe1xuICBwcm9wOiAnZm9udFNpemUnLFxuICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG59KTtcbmV4cG9ydCBjb25zdCBmb250U3R5bGUgPSBzdHlsZSh7XG4gIHByb3A6ICdmb250U3R5bGUnLFxuICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG59KTtcbmV4cG9ydCBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnZm9udFdlaWdodCcsXG4gIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbn0pO1xuZXhwb3J0IGNvbnN0IGxldHRlclNwYWNpbmcgPSBzdHlsZSh7XG4gIHByb3A6ICdsZXR0ZXJTcGFjaW5nJ1xufSk7XG5leHBvcnQgY29uc3QgdGV4dFRyYW5zZm9ybSA9IHN0eWxlKHtcbiAgcHJvcDogJ3RleHRUcmFuc2Zvcm0nXG59KTtcbmV4cG9ydCBjb25zdCBsaW5lSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbGluZUhlaWdodCdcbn0pO1xuZXhwb3J0IGNvbnN0IHRleHRBbGlnbiA9IHN0eWxlKHtcbiAgcHJvcDogJ3RleHRBbGlnbidcbn0pO1xuZXhwb3J0IGNvbnN0IHR5cG9ncmFwaHlWYXJpYW50ID0gc3R5bGUoe1xuICBwcm9wOiAndHlwb2dyYXBoeScsXG4gIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xufSk7XG5jb25zdCB0eXBvZ3JhcGh5ID0gY29tcG9zZSh0eXBvZ3JhcGh5VmFyaWFudCwgZm9udEZhbWlseSwgZm9udFNpemUsIGZvbnRTdHlsZSwgZm9udFdlaWdodCwgbGV0dGVyU3BhY2luZywgbGluZUhlaWdodCwgdGV4dEFsaWduLCB0ZXh0VHJhbnNmb3JtKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHk7IiwiaW1wb3J0IGJvcmRlcnMgZnJvbSAnLi9ib3JkZXJzJztcbmltcG9ydCBkaXNwbGF5IGZyb20gJy4vZGlzcGxheSc7XG5pbXBvcnQgZmxleGJveCBmcm9tICcuL2ZsZXhib3gnO1xuaW1wb3J0IGdyaWQgZnJvbSAnLi9jc3NHcmlkJztcbmltcG9ydCBwb3NpdGlvbnMgZnJvbSAnLi9wb3NpdGlvbnMnO1xuaW1wb3J0IHBhbGV0dGUgZnJvbSAnLi9wYWxldHRlJztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgc2l6aW5nIGZyb20gJy4vc2l6aW5nJztcbmltcG9ydCBzcGFjaW5nIGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgdHlwb2dyYXBoeSBmcm9tICcuL3R5cG9ncmFwaHknO1xuY29uc3QgZmlsdGVyUHJvcHNNYXBwaW5nID0ge1xuICBib3JkZXJzOiBib3JkZXJzLmZpbHRlclByb3BzLFxuICBkaXNwbGF5OiBkaXNwbGF5LmZpbHRlclByb3BzLFxuICBmbGV4Ym94OiBmbGV4Ym94LmZpbHRlclByb3BzLFxuICBncmlkOiBncmlkLmZpbHRlclByb3BzLFxuICBwb3NpdGlvbnM6IHBvc2l0aW9ucy5maWx0ZXJQcm9wcyxcbiAgcGFsZXR0ZTogcGFsZXR0ZS5maWx0ZXJQcm9wcyxcbiAgc2hhZG93czogc2hhZG93cy5maWx0ZXJQcm9wcyxcbiAgc2l6aW5nOiBzaXppbmcuZmlsdGVyUHJvcHMsXG4gIHNwYWNpbmc6IHNwYWNpbmcuZmlsdGVyUHJvcHMsXG4gIHR5cG9ncmFwaHk6IHR5cG9ncmFwaHkuZmlsdGVyUHJvcHNcbn07XG5leHBvcnQgY29uc3Qgc3R5bGVGdW5jdGlvbk1hcHBpbmcgPSB7XG4gIGJvcmRlcnMsXG4gIGRpc3BsYXksXG4gIGZsZXhib3gsXG4gIGdyaWQsXG4gIHBvc2l0aW9ucyxcbiAgcGFsZXR0ZSxcbiAgc2hhZG93cyxcbiAgc2l6aW5nLFxuICBzcGFjaW5nLFxuICB0eXBvZ3JhcGh5XG59O1xuZXhwb3J0IGNvbnN0IHByb3BUb1N0eWxlRnVuY3Rpb24gPSBPYmplY3Qua2V5cyhmaWx0ZXJQcm9wc01hcHBpbmcpLnJlZHVjZSgoYWNjLCBzdHlsZUZuTmFtZSkgPT4ge1xuICBmaWx0ZXJQcm9wc01hcHBpbmdbc3R5bGVGbk5hbWVdLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgIGFjY1twcm9wTmFtZV0gPSBzdHlsZUZ1bmN0aW9uTWFwcGluZ1tzdHlsZUZuTmFtZV07XG4gIH0pO1xuICByZXR1cm4gYWNjO1xufSwge30pO1xuXG5mdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbHVlLCB0aGVtZSkge1xuICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgIFtwcm9wXTogdmFsdWUsXG4gICAgdGhlbWVcbiAgfTtcbiAgY29uc3Qgc3R5bGVGdW5jdGlvbiA9IHByb3BUb1N0eWxlRnVuY3Rpb25bcHJvcF07XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uID8gc3R5bGVGdW5jdGlvbihpbnB1dFByb3BzKSA6IHtcbiAgICBbcHJvcF06IHZhbHVlXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRoZW1lVmFsdWU7IiwiaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5cbmZ1bmN0aW9uIG1lcmdlKGFjYywgaXRlbSkge1xuICBpZiAoIWl0ZW0pIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgcmV0dXJuIGRlZXBtZXJnZShhY2MsIGl0ZW0sIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwLCBpdCdzIHdheSBmYXN0ZXIuXG5cbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlOyIsImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCBtZW1vaXplIGZyb20gJy4vbWVtb2l6ZSc7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTsgLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcblxuY29uc3QgZ2V0Q3NzUHJvcGVydGllcyA9IG1lbW9pemUocHJvcCA9PiB7XG4gIC8vIEl0J3Mgbm90IGEgc2hvcnRoYW5kIG5vdGF0aW9uLlxuICBpZiAocHJvcC5sZW5ndGggPiAyKSB7XG4gICAgaWYgKGFsaWFzZXNbcHJvcF0pIHtcbiAgICAgIHByb3AgPSBhbGlhc2VzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5jb25zdCBtYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuY29uc3QgcGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgdGhlbWVLZXksIGRlZmF1bHRWYWx1ZSwgcHJvcE5hbWUpIHtcbiAgdmFyIF9nZXRQYXRoO1xuXG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcblxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIGFicyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEV4cGVjdGVkICR7cHJvcE5hbWV9IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLCBnb3QgJHthYnN9LmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWJzKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcnJheSB0eXBlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG5vbiBpbnRlZ2VyIHZhbHVlcy5gICsgYFlvdSBzaG91bGQgZWl0aGVyIHVzZSBhbiBpbnRlZ2VyIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5kZXgsIG9yIGRlZmluZSB0aGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXMgYSBudW1iZXIuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IHRoZW1lU3BhY2luZy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICgke2Fic30pIG92ZXJmbG93cy5gLCBgVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KHRoZW1lU3BhY2luZyl9LmAsIGAke2Fic30gPiAke3RoZW1lU3BhY2luZy5sZW5ndGggLSAxfSwgeW91IG5lZWQgdG8gYWRkIHRoZSBtaXNzaW5nIHZhbHVlcy5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCB2YWx1ZSAoJHt0aGVtZVNwYWNpbmd9KSBpcyBpbnZhbGlkLmAsICdJdCBzaG91bGQgYmUgYSBudW1iZXIsIGFuIGFycmF5IG9yIGEgZnVuY3Rpb24uJ10uam9pbignXFxuJykpO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcblxuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cblxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSB7XG4gIC8vIFVzaW5nIGEgaGFzaCBjb21wdXRhdGlvbiBvdmVyIGFuIGFycmF5IGl0ZXJhdGlvbiBjb3VsZCBiZSBmYXN0ZXIsIGJ1dCB3aXRoIG9ubHkgMjggaXRlbXMsXG4gIC8vIGl0J3MgZG9lc24ndCB3b3J0aCB0aGUgYnVuZGxlIHNpemUuXG4gIGlmIChrZXlzLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShtZXJnZSwge30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFyZ2luKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgbWFyZ2luS2V5cyk7XG59XG5tYXJnaW4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IG1hcmdpbktleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xubWFyZ2luLmZpbHRlclByb3BzID0gbWFyZ2luS2V5cztcbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuXG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuXG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG5leHBvcnQgZGVmYXVsdCBzcGFjaW5nOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgY29uc3QgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGFyZyA9PiB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwiaW1wb3J0IHsgdW5zdGFibGVfY2FwaXRhbGl6ZSBhcyBjYXBpdGFsaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aChvYmosIHBhdGgsIGNoZWNrVmFycyA9IHRydWUpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcblxuXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG5cbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgIGlmIChhY2MgJiYgYWNjW2l0ZW1dICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2NbaXRlbV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCwgdXNlclZhbHVlID0gcHJvcFZhbHVlRmluYWwpIHtcbiAgbGV0IHZhbHVlO1xuXG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuXG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wc1twcm9wXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcblxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG5cbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiBjYXBpdGFsaXplKHByb3BWYWx1ZUZpbmFsKX1gLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH07XG5cbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlOyIsImltcG9ydCB7IHVzZVRoZW1lIGFzIG11aVVzZVRoZW1lIH0gZnJvbSAnQG11aS9wcml2YXRlLXRoZW1pbmcnO1xuXG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IG51bGwpIHtcbiAgY29uc3QgY29udGV4dFRoZW1lID0gbXVpVXNlVGhlbWUoKTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCJpbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSkge1xuICByZXR1cm4gdXNlVGhlbWVXaXRob3V0RGVmYXVsdChkZWZhdWx0VGhlbWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiLi9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoNykpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBhY2MuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH0sICgpID0+IHt9KTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gIT09IG51bGwgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0uY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucyA9IHtcbiAgY2xvbmU6IHRydWVcbn0pIHtcbiAgY29uc3Qgb3V0cHV0ID0gb3B0aW9ucy5jbG9uZSA/IF9leHRlbmRzKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuXG4gIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBBdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSAmJiBrZXkgaW4gdGFyZ2V0ICYmIGlzUGxhaW5PYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgIC8vIFNpbmNlIGBvdXRwdXRgIGlzIGEgY2xvbmUgb2YgYHRhcmdldGAgYW5kIHdlIGhhdmUgbmFycm93ZWQgYHRhcmdldGAgaW4gdGhpcyBibG9jayB3ZSBjYW4gY2FzdCB0byB0aGUgc2FtZSB0eXBlLlxuICAgICAgICBvdXRwdXRba2V5XSA9IGRlZXBtZXJnZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59IiwiLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvdXRpbHMvbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZmYgd2UncmUgY29uY2F0ZW5hdGluZyBwcmltaXRpdmVzXG4gIC8vIHNlZSBodHRwczovL2JhYmVsanMuaW8vZG9jcy9lbi9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzI2xvb3NlXG5cbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAvLyByZXN0IHBhcmFtcyBvdmVyLXRyYW5zcGlsZSBmb3IgdGhpcyBjYXNlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgIHVybCArPSAnJmFyZ3NbXT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tpXSk7XG4gIH1cblxuICByZXR1cm4gJ01pbmlmaWVkIE1VSSBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgdXJsICsgJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZS4nO1xuICAvKiBlc2xpbnQtZW5hYmxlIHByZWZlci10ZW1wbGF0ZSAqL1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG59IiwiaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyV2luZG93KG5vZGUpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChub2RlKTtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG59IiwiLyoqXG4gKiBUT0RPIHY1OiBjb25zaWRlciBtYWtpbmcgaXQgcHJpdmF0ZVxuICpcbiAqIHBhc3NlcyB7dmFsdWV9IHRvIHtyZWZ9XG4gKlxuICogV0FSTklORzogQmUgc3VyZSB0byBvbmx5IGNhbGwgdGhpcyBpbnNpZGUgYSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBhcyBhIHJlZi5cbiAqIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRvIGNsZWFudXAgdGhlIHByZXZpb3VzIHtyZWZ9IGlmIGl0IGNoYW5nZXMuIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM1MzlcbiAqXG4gKiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZXhwb3NlIHRoZSByZWYgb2YgYW4gaW5uZXIgY29tcG9uZW50IHRvIHRoZSBwdWJsaWMgQVBJXG4gKiB3aGlsZSBzdGlsbCB1c2luZyBpdCBpbnNpZGUgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSByZWYgQSByZWYgY2FsbGJhY2sgb3IgcmVmIG9iamVjdC4gSWYgYW55dGhpbmcgZmFsc3ksIHRoaXMgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZikge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCB1c2VFbmhhbmNlZEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MDk5I2lzc3VlY29tbWVudC00NDAwMTM4OTJcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiAvLyBAdHMtZXhwZWN0LWVycm9yIGhpZGUgYHRoaXNgXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tY29tbWEtb3BlcmF0b3JcbiAgKDAsIHJlZi5jdXJyZW50KSguLi5hcmdzKSwgW10pO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzZXRSZWYgZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ya1JlZihyZWZBLCByZWZCKSB7XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIHRoZSByZWYgcHJvcHMgY2hhbmdlIGFuZCBhcmUgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmQSA9PSBudWxsICYmIHJlZkIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZlZhbHVlID0+IHtcbiAgICAgIHNldFJlZihyZWZBLCByZWZWYWx1ZSk7XG4gICAgICBzZXRSZWYocmVmQiwgcmVmVmFsdWUpO1xuICAgIH07XG4gIH0sIFtyZWZBLCByZWZCXSk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcblxuZnVuY3Rpb24gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSkge1xuICBjb25zdCBbZGVmYXVsdElkLCBzZXREZWZhdWx0SWRdID0gUmVhY3QudXNlU3RhdGUoaWRPdmVycmlkZSk7XG4gIGNvbnN0IGlkID0gaWRPdmVycmlkZSB8fCBkZWZhdWx0SWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRJZCA9PSBudWxsKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byB0aGlzIGRlZmF1bHQgaWQgd2hlbiBwb3NzaWJsZS5cbiAgICAgIC8vIFVzZSB0aGUgaW5jcmVtZW50aW5nIHZhbHVlIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgb25seS5cbiAgICAgIC8vIFdlIGNhbid0IHVzZSBpdCBzZXJ2ZXItc2lkZS5cbiAgICAgIC8vIElmIHlvdSB3YW50IHRvIHVzZSByYW5kb20gdmFsdWVzIHBsZWFzZSBjb25zaWRlciB0aGUgQmlydGhkYXkgUHJvYmxlbTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlydGhkYXlfcHJvYmxlbVxuICAgICAgZ2xvYmFsSWQgKz0gMTtcbiAgICAgIHNldERlZmF1bHRJZChgbXVpLSR7Z2xvYmFsSWR9YCk7XG4gICAgfVxuICB9LCBbZGVmYXVsdElkXSk7XG4gIHJldHVybiBpZDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uY2F0IC0tIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svaXNzdWVzLzE0ODE0XG5cblxuY29uc3QgbWF5YmVSZWFjdFVzZUlkID0gUmVhY3RbJ3VzZUlkJyArICcnXTtcbi8qKlxuICpcbiAqIEBleGFtcGxlIDxkaXYgaWQ9e3VzZUlkKCl9IC8+XG4gKiBAcGFyYW0gaWRPdmVycmlkZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJZChpZE92ZXJyaWRlKSB7XG4gIGlmIChtYXliZVJlYWN0VXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlYWN0SWQgPSBtYXliZVJlYWN0VXNlSWQoKTtcbiAgICByZXR1cm4gaWRPdmVycmlkZSAhPSBudWxsID8gaWRPdmVycmlkZSA6IHJlYWN0SWQ7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIC0tIGBSZWFjdC51c2VJZGAgaXMgaW52YXJpYW50IGF0IHJ1bnRpbWUuXG5cblxuICByZXR1cm4gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSk7XG59IiwiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zik7ZWxzZSBmb3IodCBpbiBlKWVbdF0mJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIjtmPGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1tmKytdKSYmKHQ9cihlKSkmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBkZWZhdWx0IGNsc3g7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iXSwibmFtZXMiOlsiU3R5bGVTaGVldCIsIm9wdGlvbnMiLCJfdGhpcyIsInRoaXMiLCJfaW5zZXJ0VGFnIiwidGFnIiwiYmVmb3JlIiwidGFncyIsImxlbmd0aCIsImluc2VydGlvblBvaW50IiwibmV4dFNpYmxpbmciLCJwcmVwZW5kIiwiY29udGFpbmVyIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsInB1c2giLCJpc1NwZWVkeSIsInVuZGVmaW5lZCIsInNwZWVkeSIsImN0ciIsIm5vbmNlIiwia2V5IiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaHlkcmF0ZSIsIm5vZGVzIiwiZm9yRWFjaCIsImluc2VydCIsInJ1bGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiY3JlYXRlU3R5bGVFbGVtZW50Iiwic2hlZXQiLCJpIiwic3R5bGVTaGVldHMiLCJvd25lck5vZGUiLCJzaGVldEZvclRhZyIsImluc2VydFJ1bGUiLCJjc3NSdWxlcyIsImUiLCJmbHVzaCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImFicyIsIk1hdGgiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJPYmplY3QiLCJhc3NpZ24iLCJ0cmltIiwidmFsdWUiLCJyZXBsYWNlIiwicGF0dGVybiIsInJlcGxhY2VtZW50IiwiaW5kZXhvZiIsInNlYXJjaCIsImluZGV4T2YiLCJpbmRleCIsImNoYXJDb2RlQXQiLCJiZWdpbiIsImVuZCIsInNsaWNlIiwiYXJyYXkiLCJsaW5lIiwiY29sdW1uIiwicG9zaXRpb24iLCJjaGFyYWN0ZXIiLCJjaGFyYWN0ZXJzIiwibm9kZSIsInJvb3QiLCJwYXJlbnQiLCJ0eXBlIiwicHJvcHMiLCJjaGlsZHJlbiIsInJldHVybiIsImNvcHkiLCJwcmV2IiwibmV4dCIsInBlZWsiLCJjYXJldCIsInRva2VuIiwiYWxsb2MiLCJkZWFsbG9jIiwiZGVsaW1pdCIsImRlbGltaXRlciIsIndoaXRlc3BhY2UiLCJlc2NhcGluZyIsImNvdW50IiwiY29tbWVudGVyIiwiaWRlbnRpZmllciIsIk1TIiwiTU9aIiwiV0VCS0lUIiwiQ09NTUVOVCIsIkRFQ0xBUkFUSU9OIiwiS0VZRlJBTUVTIiwic2VyaWFsaXplIiwiY2FsbGJhY2siLCJvdXRwdXQiLCJzdHJpbmdpZnkiLCJlbGVtZW50Iiwiam9pbiIsInByZWZpeCIsImhhc2giLCJjb21waWxlIiwicGFyc2UiLCJydWxlcyIsInJ1bGVzZXRzIiwicHNldWRvIiwicG9pbnRzIiwiZGVjbGFyYXRpb25zIiwib2Zmc2V0IiwiYXRydWxlIiwicHJvcGVydHkiLCJwcmV2aW91cyIsInZhcmlhYmxlIiwic2Nhbm5pbmciLCJhbXBlcnNhbmQiLCJyZWZlcmVuY2UiLCJjb21tZW50IiwiZGVjbGFyYXRpb24iLCJydWxlc2V0IiwicG9zdCIsInNpemUiLCJqIiwiayIsIngiLCJ5IiwieiIsImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsImZpeGVkRWxlbWVudHMiLCJXZWFrTWFwIiwiY29tcGF0IiwiaXNJbXBsaWNpdFJ1bGUiLCJnZXQiLCJzZXQiLCJwYXJzZWQiLCJ0b1J1bGVzIiwiZ2V0UnVsZXMiLCJwYXJlbnRSdWxlcyIsInJlbW92ZUxhYmVsIiwiZGVmYXVsdFN0eWxpc1BsdWdpbnMiLCJtYXAiLCJleGVjIiwibWF0Y2giLCJzc3JTdHlsZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiQXJyYXkiLCJjYWxsIiwiZ2V0QXR0cmlidXRlIiwiaGVhZCIsIl9pbnNlcnQiLCJzdHlsaXNQbHVnaW5zIiwiaW5zZXJ0ZWQiLCJub2Rlc1RvSHlkcmF0ZSIsImF0dHJpYiIsInNwbGl0IiwiY3VycmVudFNoZWV0IiwiY29sbGVjdGlvbiIsImZpbmFsaXppbmdQbHVnaW5zIiwic2VyaWFsaXplciIsImNvbmNhdCIsInNlbGVjdG9yIiwic2VyaWFsaXplZCIsInNob3VsZENhY2hlIiwic3R5bGVzIiwiY2FjaGUiLCJuYW1lIiwicmVnaXN0ZXJlZCIsImZuIiwiY3JlYXRlIiwiYXJnIiwiRW1vdGlvbkNhY2hlQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJIVE1MRWxlbWVudCIsIkNhY2hlUHJvdmlkZXIiLCJQcm92aWRlciIsIndpdGhFbW90aW9uQ2FjaGUiLCJmdW5jIiwiZm9yd2FyZFJlZiIsInJlZiIsInVzZUNvbnRleHQiLCJUaGVtZUNvbnRleHQiLCJzdHIiLCJoIiwibGVuIiwidG9TdHJpbmciLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJjb2x1bW5zIiwiZmxleCIsImZsZXhHcm93IiwiZmxleFBvc2l0aXZlIiwiZmxleFNocmluayIsImZsZXhOZWdhdGl2ZSIsImZsZXhPcmRlciIsImdyaWRSb3ciLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRDb2x1bW5TcGFuIiwiZ3JpZENvbHVtblN0YXJ0IiwibXNHcmlkUm93IiwibXNHcmlkUm93U3BhbiIsIm1zR3JpZENvbHVtbiIsIm1zR3JpZENvbHVtblNwYW4iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsIldlYmtpdExpbmVDbGFtcCIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicHJvY2Vzc1N0eWxlVmFsdWUiLCJwMSIsInAyIiwiY3Vyc29yIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsIl9fZW1vdGlvbl9zdHlsZXMiLCJhbmltIiwib2JqIiwic3RyaW5nIiwiaXNBcnJheSIsIl9rZXkiLCJpbnRlcnBvbGF0ZWQiLCJfaSIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsInJlc3VsdCIsImNhY2hlZCIsImxhYmVsUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsImFyZ3MiLCJzdHJpbmdNb2RlIiwic3RyaW5ncyIsInJhdyIsImxhc3RJbmRleCIsImlkZW50aWZpZXJOYW1lIiwicmVhY3RQcm9wc1JlZ2V4IiwicHJvcCIsInRlc3QiLCJnZXRSZWdpc3RlcmVkU3R5bGVzIiwicmVnaXN0ZXJlZFN0eWxlcyIsImNsYXNzTmFtZXMiLCJyYXdDbGFzc05hbWUiLCJjbGFzc05hbWUiLCJyZWdpc3RlclN0eWxlcyIsImlzU3RyaW5nVGFnIiwidGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIiwidGVzdE9taXRQcm9wc09uQ29tcG9uZW50IiwiZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwiY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyIsImlzUmVhbCIsInNob3VsZEZvcndhcmRQcm9wIiwib3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wIiwiX19lbW90aW9uX2ZvcndhcmRQcm9wIiwicHJvcE5hbWUiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJJbnNlcnRpb24iLCJfcmVmIiwiY3VycmVudCIsImluc2VydFN0eWxlcyIsIm5ld1N0eWxlZCIsImNyZWF0ZVN0eWxlZCIsInRhcmdldENsYXNzTmFtZSIsIl9fZW1vdGlvbl9yZWFsIiwiYmFzZVRhZyIsIl9fZW1vdGlvbl9iYXNlIiwibGFiZWwiLCJ0YXJnZXQiLCJkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCJzaG91bGRVc2VBcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiU3R5bGVkIiwidyIsIkZpbmFsVGFnIiwiYXMiLCJjbGFzc0ludGVycG9sYXRpb25zIiwidGhlbWUiLCJUIiwiZmluYWxTaG91bGRGb3J3YXJkUHJvcCIsIm5ld1Byb3BzIiwiRnJhZ21lbnQiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHRQcm9wcyIsImRlZmluZVByb3BlcnR5Iiwid2l0aENvbXBvbmVudCIsIm5leHRUYWciLCJuZXh0T3B0aW9ucyIsInRhZ05hbWUiLCJjb21wb3NlQ2xhc3NlcyIsInNsb3RzIiwiZ2V0VXRpbGl0eUNsYXNzIiwiY2xhc3NlcyIsImtleXMiLCJzbG90IiwicmVkdWNlIiwiYWNjIiwiZGVmYXVsdEdlbmVyYXRvciIsImNvbXBvbmVudE5hbWUiLCJnZW5lcmF0ZSIsImNvbmZpZ3VyZSIsImdlbmVyYXRvciIsInJlc2V0IiwiY3JlYXRlQ2xhc3NOYW1lR2VuZXJhdG9yIiwiZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyIsImFjdGl2ZSIsImNoZWNrZWQiLCJjb21wbGV0ZWQiLCJkaXNhYmxlZCIsImVycm9yIiwiZXhwYW5kZWQiLCJmb2N1c2VkIiwiZm9jdXNWaXNpYmxlIiwicmVxdWlyZWQiLCJzZWxlY3RlZCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJleHBvcnRzIiwiX2NyZWF0ZVN2Z0ljb24iLCJfanN4UnVudGltZSIsIl9kZWZhdWx0IiwiZGVmYXVsdCIsImpzeCIsImQiLCJlbnVtZXJhYmxlIiwiX3V0aWxzIiwiY3JlYXRlU3ZnSWNvbiIsImdldEFsZXJ0VXRpbGl0eUNsYXNzIiwiZ2V0SWNvbkJ1dHRvblV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZCIsIkljb25CdXR0b25Sb290Iiwic3R5bGVkIiwiQnV0dG9uQmFzZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwib3duZXJTdGF0ZSIsImNvbG9yIiwiY2FwaXRhbGl6ZSIsImVkZ2UiLCJ0ZXh0QWxpZ24iLCJmb250U2l6ZSIsInR5cG9ncmFwaHkiLCJweFRvUmVtIiwicGFkZGluZyIsImJvcmRlclJhZGl1cyIsIm92ZXJmbG93IiwicGFsZXR0ZSIsImFjdGlvbiIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImR1cmF0aW9uIiwic2hvcnRlc3QiLCJkaXNhYmxlUmlwcGxlIiwiYmFja2dyb3VuZENvbG9yIiwiaG92ZXJPcGFjaXR5IiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwibWFpbiIsImluUHJvcHMiLCJ1c2VUaGVtZVByb3BzIiwiZGlzYWJsZUZvY3VzUmlwcGxlIiwib3RoZXIiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImNlbnRlclJpcHBsZSIsImZvY3VzUmlwcGxlIiwiX0Nsb3NlSWNvbiIsIkFsZXJ0Um9vdCIsIlBhcGVyIiwidmFyaWFudCIsInNldmVyaXR5IiwiZ2V0Q29sb3IiLCJtb2RlIiwiZ2V0QmFja2dyb3VuZENvbG9yIiwiYm9keTIiLCJzaGFwZSIsImRpc3BsYXkiLCJsaWdodCIsImJvcmRlciIsImZvbnRXZWlnaHRNZWRpdW0iLCJkYXJrIiwiQWxlcnRJY29uIiwiaWNvbiIsIkFsZXJ0TWVzc2FnZSIsIm1lc3NhZ2UiLCJBbGVydEFjdGlvbiIsImFsaWduSXRlbXMiLCJkZWZhdWx0SWNvbk1hcHBpbmciLCJzdWNjZXNzIiwiU3VjY2Vzc091dGxpbmVkIiwid2FybmluZyIsIlJlcG9ydFByb2JsZW1PdXRsaW5lZCIsIkVycm9yT3V0bGluZSIsImluZm8iLCJJbmZvT3V0bGluZWQiLCJjbG9zZVRleHQiLCJpY29uTWFwcGluZyIsIm9uQ2xvc2UiLCJyb2xlIiwic3F1YXJlIiwiZWxldmF0aW9uIiwidGl0bGUiLCJvbkNsaWNrIiwiQ2xvc2UiLCJnZXRBdmF0YXJVdGlsaXR5Q2xhc3MiLCJBdmF0YXJSb290IiwiY29sb3JEZWZhdWx0IiwianVzdGlmeUNvbnRlbnQiLCJ3aWR0aCIsImhlaWdodCIsImZvbnRGYW1pbHkiLCJ1c2VyU2VsZWN0IiwiYmFja2dyb3VuZCIsImdyZXkiLCJBdmF0YXJJbWciLCJpbWciLCJvYmplY3RGaXQiLCJ0ZXh0SW5kZW50IiwiQXZhdGFyRmFsbGJhY2siLCJQZXJzb24iLCJmYWxsYmFjayIsImFsdCIsImNoaWxkcmVuUHJvcCIsImNvbXBvbmVudCIsImltZ1Byb3BzIiwic2l6ZXMiLCJzcmMiLCJzcmNTZXQiLCJsb2FkZWQiLCJjcm9zc09yaWdpbiIsInJlZmVycmVyUG9saWN5Iiwic2V0TG9hZGVkIiwiaW1hZ2UiLCJJbWFnZSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzcmNzZXQiLCJ1c2VMb2FkZWQiLCJoYXNJbWciLCJoYXNJbWdOb3RGYWlsaW5nIiwiZ2V0Qm90dG9tTmF2aWdhdGlvblV0aWxpdHlDbGFzcyIsIkJvdHRvbU5hdmlnYXRpb25Sb290IiwicGFwZXIiLCJvbkNoYW5nZSIsInNob3dMYWJlbHMiLCJjaGlsZCIsImNoaWxkSW5kZXgiLCJjaGlsZFZhbHVlIiwic2hvd0xhYmVsIiwiZ2V0Qm90dG9tTmF2aWdhdGlvbkFjdGlvblV0aWxpdHlDbGFzcyIsIkJvdHRvbU5hdmlnYXRpb25BY3Rpb25Sb290IiwiaWNvbk9ubHkiLCJzaG9ydCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ0ZXh0Iiwic2Vjb25kYXJ5IiwiZmxleERpcmVjdGlvbiIsInBhZGRpbmdUb3AiLCJwcmltYXJ5IiwiQm90dG9tTmF2aWdhdGlvbkFjdGlvbkxhYmVsIiwidHJhbnNpdGlvbkRlbGF5IiwiZXZlbnQiLCJnZXRCdXR0b25VdGlsaXR5Q2xhc3MiLCJjb21tb25JY29uU3R5bGVzIiwiQnV0dG9uUm9vdCIsImNvbG9ySW5oZXJpdCIsImRpc2FibGVFbGV2YXRpb24iLCJmdWxsV2lkdGgiLCJidXR0b24iLCJ0ZXh0RGVjb3JhdGlvbiIsIkExMDAiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZ2V0Q29udHJhc3RUZXh0IiwiY29udHJhc3RUZXh0IiwiYm9yZGVyQ29sb3IiLCJCdXR0b25TdGFydEljb24iLCJzdGFydEljb24iLCJCdXR0b25FbmRJY29uIiwiZW5kSWNvbiIsImNsYXNzTmFtZUNvbnRleHQiLCJjb2xvckNvbnRleHQiLCJkaXNhYmxlZENvbnRleHQiLCJkaXNhYmxlRWxldmF0aW9uQ29udGV4dCIsImRpc2FibGVGb2N1c1JpcHBsZUNvbnRleHQiLCJkaXNhYmxlUmlwcGxlQ29udGV4dCIsImZ1bGxXaWR0aENvbnRleHQiLCJzaXplQ29udGV4dCIsInZhcmlhbnRDb250ZXh0IiwiY29sb3JQcm9wIiwiZGlzYWJsZWRQcm9wIiwiZGlzYWJsZUVsZXZhdGlvblByb3AiLCJkaXNhYmxlRm9jdXNSaXBwbGVQcm9wIiwiZGlzYWJsZVJpcHBsZVByb3AiLCJlbmRJY29uUHJvcCIsImZvY3VzVmlzaWJsZUNsYXNzTmFtZSIsImZ1bGxXaWR0aFByb3AiLCJzaXplUHJvcCIsInN0YXJ0SWNvblByb3AiLCJ2YXJpYW50UHJvcCIsImNvbXBvc2VkQ2xhc3NlcyIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiQ2hpbGRyZW4iLCJjIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwiZ2V0TmV4dENoaWxkTWFwcGluZyIsIm5leHRQcm9wcyIsInByZXZDaGlsZE1hcHBpbmciLCJvbkV4aXRlZCIsIm5leHRDaGlsZE1hcHBpbmciLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiaW4iLCJjbG9uZUVsZW1lbnQiLCJiaW5kIiwiZXhpdCIsImVudGVyIiwidmFsdWVzIiwiVHJhbnNpdGlvbkdyb3VwIiwiX1JlYWN0JENvbXBvbmVudCIsImNvbnRleHQiLCJoYW5kbGVFeGl0ZWQiLCJzdGF0ZSIsImNvbnRleHRWYWx1ZSIsImlzTW91bnRpbmciLCJmaXJzdFJlbmRlciIsImNvbXBvbmVudERpZE1vdW50IiwibW91bnRlZCIsInNldFN0YXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJhcHBlYXIiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJDb21wb25lbnQiLCJjaGlsZEZhY3RvcnkiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0IiwicHJvcFR5cGVzIiwiY3NzIiwiX2xlbiIsInVzZUxheW91dEVmZmVjdCIsImtleWZyYW1lcyIsImluc2VydGFibGUiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIl8iLCJ0IiwiZW50ZXJLZXlmcmFtZSIsImV4aXRLZXlmcmFtZSIsInB1bHNhdGVLZXlmcmFtZSIsIlRvdWNoUmlwcGxlUm9vdCIsInNraXBTeCIsInBvaW50ZXJFdmVudHMiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJUb3VjaFJpcHBsZVJpcHBsZSIsInB1bHNhdGUiLCJyaXBwbGVYIiwicmlwcGxlWSIsInJpcHBsZVNpemUiLCJpblByb3AiLCJ0aW1lb3V0IiwibGVhdmluZyIsInNldExlYXZpbmciLCJyaXBwbGVDbGFzc05hbWUiLCJyaXBwbGUiLCJyaXBwbGVWaXNpYmxlIiwicmlwcGxlUHVsc2F0ZSIsInJpcHBsZVN0eWxlcyIsImNoaWxkQ2xhc3NOYW1lIiwiY2hpbGRMZWF2aW5nIiwiY2hpbGRQdWxzYXRlIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInN0eWxlIiwiZWFzaW5nIiwiZWFzZUluT3V0Iiwic2hvcnRlciIsImNlbnRlciIsImNlbnRlclByb3AiLCJyaXBwbGVzIiwic2V0UmlwcGxlcyIsInJpcHBsZUNhbGxiYWNrIiwiaWdub3JpbmdNb3VzZURvd24iLCJzdGFydFRpbWVyIiwic3RhcnRUaW1lckNvbW1pdCIsInN0YXJ0Q29tbWl0IiwicGFyYW1zIiwiY2IiLCJvbGRSaXBwbGVzIiwic3RhcnQiLCJmYWtlRWxlbWVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRYIiwiY2xpZW50WSIsInRvdWNoZXMiLCJyb3VuZCIsInNxcnQiLCJzaXplWCIsIm1heCIsImNsaWVudFdpZHRoIiwic2l6ZVkiLCJjbGllbnRIZWlnaHQiLCJzdG9wIiwiZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyIsIkJ1dHRvbkJhc2VSb290IiwiYm94U2l6aW5nIiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJvdXRsaW5lIiwibWFyZ2luIiwidmVydGljYWxBbGlnbiIsIk1vekFwcGVhcmFuY2UiLCJXZWJraXRBcHBlYXJhbmNlIiwiYm9yZGVyU3R5bGUiLCJjb2xvckFkanVzdCIsImRpc2FibGVUb3VjaFJpcHBsZSIsIkxpbmtDb21wb25lbnQiLCJvbkJsdXIiLCJvbkNvbnRleHRNZW51Iiwib25EcmFnTGVhdmUiLCJvbkZvY3VzIiwib25Gb2N1c1Zpc2libGUiLCJvbktleURvd24iLCJvbktleVVwIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTGVhdmUiLCJvbk1vdXNlVXAiLCJvblRvdWNoRW5kIiwib25Ub3VjaE1vdmUiLCJvblRvdWNoU3RhcnQiLCJ0YWJJbmRleCIsIlRvdWNoUmlwcGxlUHJvcHMiLCJidXR0b25SZWYiLCJyaXBwbGVSZWYiLCJpc0ZvY3VzVmlzaWJsZVJlZiIsImhhbmRsZUZvY3VzVmlzaWJsZSIsImhhbmRsZUJsdXJWaXNpYmxlIiwiZm9jdXNWaXNpYmxlUmVmIiwidXNlSXNGb2N1c1Zpc2libGUiLCJzZXRGb2N1c1Zpc2libGUiLCJ1c2VSaXBwbGVIYW5kbGVyIiwicmlwcGxlQWN0aW9uIiwiZXZlbnRDYWxsYmFjayIsInNraXBSaXBwbGVBY3Rpb24iLCJ1c2VFdmVudENhbGxiYWNrIiwiZm9jdXMiLCJoYW5kbGVNb3VzZURvd24iLCJoYW5kbGVDb250ZXh0TWVudSIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZU1vdXNlVXAiLCJoYW5kbGVNb3VzZUxlYXZlIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVUb3VjaFN0YXJ0IiwiaGFuZGxlVG91Y2hFbmQiLCJoYW5kbGVUb3VjaE1vdmUiLCJoYW5kbGVCbHVyIiwiaGFuZGxlRm9jdXMiLCJjdXJyZW50VGFyZ2V0IiwiaXNOb25OYXRpdmVCdXR0b24iLCJocmVmIiwia2V5ZG93blJlZiIsImhhbmRsZUtleURvd24iLCJoYW5kbGVLZXlVcCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJDb21wb25lbnRQcm9wIiwidG8iLCJidXR0b25Qcm9wcyIsImhhbmRsZU93blJlZiIsInVzZUZvcmtSZWYiLCJoYW5kbGVSZWYiLCJtb3VudGVkU3RhdGUiLCJzZXRNb3VudGVkU3RhdGUiLCJlbmFibGVUb3VjaFJpcHBsZSIsImRpc2FibGVQb3J0YWwiLCJtb3VudE5vZGUiLCJzZXRNb3VudE5vZGUiLCJ1c2VFbmhhbmNlZEVmZmVjdCIsImdldENvbnRhaW5lciIsImJvZHkiLCJzZXRSZWYiLCJhcmlhSGlkZGVuIiwic2hvdyIsInJlbW92ZUF0dHJpYnV0ZSIsImdldFBhZGRpbmdSaWdodCIsInBhcnNlSW50Iiwib3duZXJXaW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwicGFkZGluZ1JpZ2h0IiwiYXJpYUhpZGRlblNpYmxpbmdzIiwibW91bnRFbGVtZW50IiwiY3VycmVudEVsZW1lbnQiLCJlbGVtZW50c1RvRXhjbHVkZSIsImJsYWNrbGlzdCIsImJsYWNrbGlzdFRhZ05hbWVzIiwiZmluZEluZGV4T2YiLCJpdGVtcyIsImlkeCIsInNvbWUiLCJpdGVtIiwiY2FuZGlkYXRlc1NlbGVjdG9yIiwiZGVmYXVsdEdldFRhYmJhYmxlIiwicmVndWxhclRhYk5vZGVzIiwib3JkZXJlZFRhYk5vZGVzIiwiZnJvbSIsIm5vZGVUYWJJbmRleCIsInRhYmluZGV4QXR0ciIsIk51bWJlciIsImlzTmFOIiwiY29udGVudEVkaXRhYmxlIiwibm9kZU5hbWUiLCJnZXRUYWJJbmRleCIsImdldFJhZGlvIiwib3duZXJEb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJyb3ZpbmciLCJpc05vblRhYmJhYmxlUmFkaW8iLCJpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlIiwiZG9jdW1lbnRPcmRlciIsInNvcnQiLCJhIiwiYiIsImRlZmF1bHRJc0VuYWJsZWQiLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJnZXRUYWJiYWJsZSIsImlzRW5hYmxlZCIsIm9wZW4iLCJpZ25vcmVOZXh0RW5mb3JjZUZvY3VzIiwic2VudGluZWxTdGFydCIsInNlbnRpbmVsRW5kIiwibm9kZVRvUmVzdG9yZSIsInJlYWN0Rm9jdXNFdmVudFRhcmdldCIsImFjdGl2YXRlZCIsInJvb3RSZWYiLCJsYXN0S2V5ZG93biIsImRvYyIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImhhc0F0dHJpYnV0ZSIsImNvbnRhaW4iLCJuYXRpdmVFdmVudCIsInJvb3RFbGVtZW50IiwiaGFzRm9jdXMiLCJ0YWJiYWJsZSIsIl9sYXN0S2V5ZG93biRjdXJyZW50IiwiX2xhc3RLZXlkb3duJGN1cnJlbnQyIiwiaXNTaGlmdFRhYiIsIkJvb2xlYW4iLCJzaGlmdEtleSIsImZvY3VzTmV4dCIsImZvY3VzUHJldmlvdXMiLCJsb29wRm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlRm9jdXNTZW50aW5lbCIsInJlbGF0ZWRUYXJnZXQiLCJjaGlsZHJlblByb3BzSGFuZGxlciIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiZGVmYXVsdE1hbmFnZXIiLCJjb25zdHJ1Y3RvciIsImNvbnRhaW5lcnMiLCJtb2RhbHMiLCJhZGQiLCJtb2RhbCIsIm1vZGFsSW5kZXgiLCJtb2RhbFJlZiIsImhpZGRlblNpYmxpbmdzIiwiZ2V0SGlkZGVuU2libGluZ3MiLCJtb3VudCIsImNvbnRhaW5lckluZGV4IiwicmVzdG9yZSIsImNvbnRhaW5lckluZm8iLCJyZXN0b3JlU3R5bGUiLCJkaXNhYmxlU2Nyb2xsTG9jayIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGxIZWlnaHQiLCJpc092ZXJmbG93aW5nIiwic2Nyb2xsYmFyU2l6ZSIsImRvY3VtZW50V2lkdGgiLCJ3aW5kb3ciLCJnZXRTY3JvbGxiYXJTaXplIiwiZWwiLCJwYXJlbnRFbGVtZW50IiwiY29udGFpbmVyV2luZG93Iiwic2Nyb2xsQ29udGFpbmVyIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwic2V0UHJvcGVydHkiLCJyZW1vdmVQcm9wZXJ0eSIsImhhbmRsZUNvbnRhaW5lciIsInJlbW92ZSIsInNwbGljZSIsIm5leHRUb3AiLCJpc1RvcE1vZGFsIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcFByb3BzIiwiY2xhc3Nlc1Byb3AiLCJjbG9zZUFmdGVyVHJhbnNpdGlvbiIsImNvbXBvbmVudHMiLCJjb21wb25lbnRzUHJvcHMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsImhpZGVCYWNrZHJvcCIsImtlZXBNb3VudGVkIiwibWFuYWdlciIsIm9uQmFja2Ryb3BDbGljayIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwiZXhpdGVkIiwic2V0RXhpdGVkIiwibW91bnROb2RlUmVmIiwiaGFzVHJhbnNpdGlvbiIsImhhc093blByb3BlcnR5IiwiZ2V0SGFzVHJhbnNpdGlvbiIsImdldE1vZGFsIiwiaGFuZGxlTW91bnRlZCIsInNjcm9sbFRvcCIsImhhbmRsZU9wZW4iLCJyZXNvbHZlZENvbnRhaW5lciIsImhhbmRsZVBvcnRhbFJlZiIsImhhbmRsZUNsb3NlIiwiY2hpbGRQcm9wcyIsIm9uRW50ZXIiLCJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCJSb290Iiwicm9vdFByb3BzIiwiaXNIb3N0Q29tcG9uZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MiLCJpbnZpc2libGUiLCJlbnRlcmluZyIsImVudGVyZWQiLCJkZWZhdWx0VGltZW91dCIsImFkZEVuZExpc3RlbmVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJUcmFuc2l0aW9uIiwidXNlVGhlbWUiLCJub2RlUmVmIiwiZm9yZWlnblJlZiIsIm5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvblByb3BzIiwid2Via2l0VHJhbnNpdGlvbiIsImhhbmRsZUVudGVyZWQiLCJoYW5kbGVFeGl0aW5nIiwiaGFuZGxlRXhpdCIsInZpc2liaWxpdHkiLCJCYWNrZHJvcFJvb3QiLCJfY29tcG9uZW50c1Byb3BzJHJvb3QiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJleHRlbmRVdGlsaXR5Q2xhc3NlcyIsIk1vZGFsUm9vdCIsImhpZGRlbiIsIk1vZGFsQmFja2Ryb3AiLCJiYWNrZHJvcCIsImNvbW1vblByb3BzIiwiZ2V0RGlhbG9nVXRpbGl0eUNsYXNzIiwiRGlhbG9nQmFja2Ryb3AiLCJvdmVycmlkZXMiLCJEaWFsb2dSb290IiwiRGlhbG9nQ29udGFpbmVyIiwic2Nyb2xsIiwiY29udGVudCIsIkRpYWxvZ1BhcGVyIiwicGFwZXJGdWxsV2lkdGgiLCJmdWxsU2NyZWVuIiwicGFwZXJGdWxsU2NyZWVuIiwibWF4SGVpZ2h0IiwiYnJlYWtwb2ludHMiLCJ1bml0IiwieHMiLCJkb3duIiwiZGVmYXVsdFRyYW5zaXRpb25EdXJhdGlvbiIsImFyaWFEZXNjcmliZWRieSIsImFyaWFMYWJlbGxlZGJ5UHJvcCIsIlBhcGVyQ29tcG9uZW50IiwiUGFwZXJQcm9wcyIsIlRyYW5zaXRpb25Qcm9wcyIsImJhY2tkcm9wQ2xpY2siLCJhcmlhTGFiZWxsZWRieSIsInVzZUlkIiwiZGlhbG9nQ29udGV4dFZhbHVlIiwidGl0bGVJZCIsIkRpYWxvZ0NvbnRleHQiLCJnZXREaWFsb2dBY3Rpb25zVXRpbGl0eUNsYXNzIiwiRGlhbG9nQWN0aW9uc1Jvb3QiLCJkaXNhYmxlU3BhY2luZyIsInNwYWNpbmciLCJnZXREaWFsb2dDb250ZW50VXRpbGl0eUNsYXNzIiwiRGlhbG9nQ29udGVudFJvb3QiLCJkaXZpZGVycyIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwiYm9yZGVyVG9wIiwiZGl2aWRlciIsImJvcmRlckJvdHRvbSIsImRpYWxvZ1RpdGxlQ2xhc3NlcyIsIkRpYWxvZ1RpdGxlUm9vdCIsImlkIiwiaWRQcm9wIiwiZ2V0RGlhbG9nVGl0bGVVdGlsaXR5Q2xhc3MiLCJnZXREaXZpZGVyVXRpbGl0eUNsYXNzIiwiRGl2aWRlclJvb3QiLCJhYnNvbHV0ZSIsIm9yaWVudGF0aW9uIiwidmVydGljYWwiLCJmbGV4SXRlbSIsIndpdGhDaGlsZHJlbiIsIndpdGhDaGlsZHJlblZlcnRpY2FsIiwidGV4dEFsaWduUmlnaHQiLCJ0ZXh0QWxpZ25MZWZ0IiwiYm9yZGVyV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImJvcmRlclJpZ2h0V2lkdGgiLCJhbGlnblNlbGYiLCJ3aGl0ZVNwYWNlIiwidHJhbnNmb3JtIiwiYm9yZGVyTGVmdCIsIkRpdmlkZXJXcmFwcGVyIiwid3JhcHBlciIsIndyYXBwZXJWZXJ0aWNhbCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsImdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyIsIkZvcm1Hcm91cFJvb3QiLCJyb3ciLCJmbGV4V3JhcCIsImdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzIiwiSW5wdXRBZG9ybm1lbnRSb290IiwiZGlzYWJsZVBvaW50ZXJFdmVudHMiLCJkaXNhYmxlVHlwb2dyYXBoeSIsIm11aUZvcm1Db250cm9sIiwiaGlkZGVuTGFiZWwiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIlR5cG9ncmFwaHkiLCJnZXRMaXN0VXRpbGl0eUNsYXNzIiwiTGlzdFJvb3QiLCJkaXNhYmxlUGFkZGluZyIsImRlbnNlIiwic3ViaGVhZGVyIiwibGlzdFN0eWxlIiwiTGlzdENvbnRleHQiLCJnZXRMaXN0SXRlbVV0aWxpdHlDbGFzcyIsImdldExpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uQ2xhc3Nlc1V0aWxpdHlDbGFzcyIsIkxpc3RJdGVtU2Vjb25kYXJ5QWN0aW9uUm9vdCIsImRpc2FibGVHdXR0ZXJzIiwiTGlzdEl0ZW1TZWNvbmRhcnlBY3Rpb24iLCJtdWlOYW1lIiwiX2V4Y2x1ZGVkMiIsIkxpc3RJdGVtUm9vdCIsImFsaWduSXRlbXNGbGV4U3RhcnQiLCJndXR0ZXJzIiwiaGFzU2Vjb25kYXJ5QWN0aW9uIiwic2Vjb25kYXJ5QWN0aW9uIiwic2VsZWN0ZWRPcGFjaXR5IiwiZm9jdXNPcGFjaXR5IiwiZGlzYWJsZWRPcGFjaXR5IiwiYmFja2dyb3VuZENsaXAiLCJob3ZlciIsIkxpc3RJdGVtQ29udGFpbmVyIiwiYXV0b0ZvY3VzIiwiY29tcG9uZW50UHJvcCIsIkNvbnRhaW5lckNvbXBvbmVudCIsIkNvbnRhaW5lclByb3BzIiwiQ29udGFpbmVyQ2xhc3NOYW1lIiwiY2hpbGRDb250ZXh0IiwibGlzdEl0ZW1SZWYiLCJpc011aUVsZW1lbnQiLCJjb21wb25lbnRQcm9wcyIsInBvcCIsImdldExpc3RJdGVtQXZhdGFyVXRpbGl0eUNsYXNzIiwiTGlzdEl0ZW1BdmF0YXJSb290IiwiZ2V0TGlzdEl0ZW1UZXh0VXRpbGl0eUNsYXNzIiwiTGlzdEl0ZW1UZXh0Um9vdCIsImluc2V0IiwibXVsdGlsaW5lIiwicHJpbWFyeVByb3AiLCJwcmltYXJ5VHlwb2dyYXBoeVByb3BzIiwic2Vjb25kYXJ5UHJvcCIsInNlY29uZGFyeVR5cG9ncmFwaHlQcm9wcyIsImdldFBhcGVyVXRpbGl0eUNsYXNzIiwiZ2V0T3ZlcmxheUFscGhhIiwiYWxwaGFWYWx1ZSIsImxvZyIsInRvRml4ZWQiLCJQYXBlclJvb3QiLCJyb3VuZGVkIiwiYmFja2dyb3VuZEltYWdlIiwibWFwRXZlbnRQcm9wVG9FdmVudCIsImV2ZW50UHJvcCIsInN1YnN0cmluZyIsImRpc2FibGVSZWFjdFRyZWUiLCJtb3VzZUV2ZW50Iiwib25DbGlja0F3YXkiLCJ0b3VjaEV2ZW50IiwibW92ZWRSZWYiLCJhY3RpdmF0ZWRSZWYiLCJzeW50aGV0aWNFdmVudFJlZiIsImhhbmRsZUNsaWNrQXdheSIsImluc2lkZVJlYWN0VHJlZSIsImNsaWNrZWRSb290U2Nyb2xsYmFyIiwiaW5zaWRlRE9NIiwiY29tcG9zZWRQYXRoIiwiY3JlYXRlSGFuZGxlU3ludGhldGljIiwiaGFuZGxlck5hbWUiLCJjaGlsZHJlblByb3BzIiwibWFwcGVkVG91Y2hFdmVudCIsIm1hcHBlZE1vdXNlRXZlbnQiLCJnZXRTY2FsZSIsIkdyb3ciLCJ0aW1lciIsImF1dG9UaW1lb3V0IiwiZGVsYXkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJtdWlTdXBwb3J0QXV0byIsImdldFNuYWNrYmFyQ29udGVudFV0aWxpdHlDbGFzcyIsIlNuYWNrYmFyQ29udGVudFJvb3QiLCJlbXBoYXNpcyIsInVwIiwiU25hY2tiYXJDb250ZW50TWVzc2FnZSIsIlNuYWNrYmFyQ29udGVudEFjdGlvbiIsImdldFNuYWNrYmFyVXRpbGl0eUNsYXNzIiwiU25hY2tiYXJSb290IiwiYW5jaG9yT3JpZ2luIiwiaG9yaXpvbnRhbCIsImlzUnRsIiwic25hY2tiYXIiLCJhdXRvSGlkZUR1cmF0aW9uIiwiQ2xpY2tBd2F5TGlzdGVuZXJQcm9wcyIsIkNvbnRlbnRQcm9wcyIsImRpc2FibGVXaW5kb3dCbHVyTGlzdGVuZXIiLCJvbk1vdXNlRW50ZXIiLCJyZXN1bWVIaWRlRHVyYXRpb24iLCJkaXJlY3Rpb24iLCJ0aW1lckF1dG9IaWRlIiwic2V0QXV0b0hpZGVUaW1lciIsImF1dG9IaWRlRHVyYXRpb25QYXJhbSIsImhhbmRsZVBhdXNlIiwiaGFuZGxlUmVzdW1lIiwiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsIlR5cG9ncmFwaHlSb290IiwiYWxpZ24iLCJub1dyYXAiLCJndXR0ZXJCb3R0b20iLCJwYXJhZ3JhcGgiLCJ0ZXh0T3ZlcmZsb3ciLCJkZWZhdWx0VmFyaWFudE1hcHBpbmciLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJzdWJ0aXRsZTEiLCJzdWJ0aXRsZTIiLCJib2R5MSIsImluaGVyaXQiLCJjb2xvclRyYW5zZm9ybWF0aW9ucyIsInRleHRQcmltYXJ5IiwidGV4dFNlY29uZGFyeSIsInRoZW1lUHJvcHMiLCJ0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzIiwic3giLCJpblN4Iiwic3lzdGVtUHJvcHMiLCJvdGhlclByb3BzIiwic3BsaXRQcm9wcyIsImZpbmFsU3giLCJleHRlbmRTeFByb3AiLCJ2YXJpYW50TWFwcGluZyIsImJsYWNrIiwid2hpdGUiLCJBMjAwIiwiQTQwMCIsIkE3MDAiLCJTeW1ib2wiLCJmb3IiLCJjb21tb24iLCJhY3RpdmF0ZWRPcGFjaXR5IiwiYWRkTGlnaHRPckRhcmsiLCJpbnRlbnQiLCJzaGFkZSIsInRvbmFsT2Zmc2V0IiwidG9uYWxPZmZzZXRMaWdodCIsInRvbmFsT2Zmc2V0RGFyayIsImNhc2VBbGxDYXBzIiwidGV4dFRyYW5zZm9ybSIsImRlZmF1bHRGb250RmFtaWx5IiwiY3JlYXRlVHlwb2dyYXBoeSIsImZvbnRXZWlnaHRMaWdodCIsImZvbnRXZWlnaHRSZWd1bGFyIiwiZm9udFdlaWdodEJvbGQiLCJodG1sRm9udFNpemUiLCJhbGxWYXJpYW50cyIsInB4VG9SZW0yIiwiY29lZiIsImJ1aWxkVmFyaWFudCIsImxldHRlclNwYWNpbmciLCJjYXNpbmciLCJ2YXJpYW50cyIsImNhcHRpb24iLCJvdmVybGluZSIsImRlZXBtZXJnZSIsImNsb25lIiwiY3JlYXRlU2hhZG93IiwicHgiLCJtb2JpbGVTdGVwcGVyIiwic3BlZWREaWFsIiwiYXBwQmFyIiwiZHJhd2VyIiwidG9vbHRpcCIsIm1peGlucyIsIm1peGluc0lucHV0IiwicGFsZXR0ZUlucHV0IiwidHJhbnNpdGlvbnNJbnB1dCIsInR5cG9ncmFwaHlJbnB1dCIsImNvbnRyYXN0VGhyZXNob2xkIiwiZ2V0RGVmYXVsdFByaW1hcnkiLCJnZXREZWZhdWx0U2Vjb25kYXJ5IiwicmVkIiwiZ2V0RGVmYXVsdEVycm9yIiwiZ2V0RGVmYXVsdEluZm8iLCJncmVlbiIsImdldERlZmF1bHRTdWNjZXNzIiwib3JhbmdlIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJhdWdtZW50Q29sb3IiLCJtYWluU2hhZGUiLCJsaWdodFNoYWRlIiwiZGFya1NoYWRlIiwiRXJyb3IiLCJKU09OIiwibW9kZXMiLCJjcmVhdGVQYWxldHRlIiwic3lzdGVtVGhlbWUiLCJtdWlUaGVtZSIsInRvb2xiYXIiLCJtaW5IZWlnaHQiLCJjcmVhdGVUcmFuc2l0aW9ucyIsImFyZ3VtZW50IiwiZWFzZU91dCIsImVhc2VJbiIsInNoYXJwIiwic3RhbmRhcmQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJjb25zdGFudCIsImlucHV0VHJhbnNpdGlvbnMiLCJtZXJnZWRFYXNpbmciLCJtZXJnZWREdXJhdGlvbiIsImR1cmF0aW9uT3B0aW9uIiwiZWFzaW5nT3B0aW9uIiwiYW5pbWF0ZWRQcm9wIiwiaXNFbXB0eSIsInByb3BzVG9DbGFzc0tleSIsImNsYXNzS2V5Iiwic3R5bGVGdW5jdGlvblN4Iiwic3R5bGVGdW5jdGlvbk1hcHBpbmciLCJwcm9wVG9TdHlsZUZ1bmN0aW9uIiwic3R5bGVGbk5hbWUiLCJmaWx0ZXJQcm9wcyIsImdldFRoZW1lVmFsdWUiLCJpbnB1dFByb3BzIiwic3R5bGVGdW5jdGlvbiIsInRyYXZlcnNlIiwic3hJbnB1dCIsInN4T2JqZWN0IiwiZW1wdHlCcmVha3BvaW50cyIsImJyZWFrcG9pbnRzS2V5cyIsInN0eWxlS2V5IiwibWF5YmVGbiIsIm1lcmdlIiwiYnJlYWtwb2ludHNWYWx1ZXMiLCJvYmplY3RzIiwiYWxsS2V5cyIsIm9iamVjdCIsInVuaW9uIiwiU2V0IiwiZXZlcnkiLCJvYmplY3RzSGF2ZVNhbWVLZXlzIiwidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwiX2V4Y2x1ZGVkMyIsInN5c3RlbURlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwiaW5wdXQiLCJkZWZhdWx0VGhlbWUiLCJzbG90U2hvdWxkRm9yd2FyZFByb3AiLCJzeXN0ZW1TeCIsIl9fbXVpX3N5c3RlbVN4IiwiaW5wdXRPcHRpb25zIiwicHJvY2Vzc29yIiwiZmlsdGVyIiwiY29tcG9uZW50U2xvdCIsInNraXBWYXJpYW50c1Jlc29sdmVyIiwiaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciIsImlucHV0U2tpcFN4Iiwic2hvdWxkRm9yd2FyZFByb3BPcHRpb24iLCJkZWZhdWx0U3R5bGVkUmVzb2x2ZXIiLCJtdWlTdHlsZWRSZXNvbHZlciIsInN0eWxlQXJnIiwiZXhwcmVzc2lvbnMiLCJleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUiLCJzdHlsZXNBcmciLCJ0aGVtZUlucHV0IiwidHJhbnNmb3JtZWRTdHlsZUFyZyIsInN0eWxlT3ZlcnJpZGVzIiwiZ2V0U3R5bGVPdmVycmlkZXMiLCJyZXNvbHZlZFN0eWxlT3ZlcnJpZGVzIiwiZW50cmllcyIsInNsb3RLZXkiLCJzbG90U3R5bGUiLCJfdGhlbWUkY29tcG9uZW50cyIsIl90aGVtZSRjb21wb25lbnRzJG5hbSIsInZhcmlhbnRzU3R5bGVzIiwidGhlbWVWYXJpYW50cyIsInRoZW1lVmFyaWFudCIsImlzTWF0Y2giLCJ2YXJpYW50c1Jlc29sdmVyIiwiZGVmaW5pdGlvbiIsImdldFZhcmlhbnRTdHlsZXMiLCJudW1PZkN1c3RvbUZuc0FwcGxpZWQiLCJwbGFjZWhvbGRlcnMiLCJmaWxsIiwiX3JlZjIiLCJ3aXRoQ29uZmlnIiwicmVzb2x2ZVByb3BzIiwiZ2V0VGhlbWVQcm9wcyIsInJlZmxvdyIsImdldFRyYW5zaXRpb25Qcm9wcyIsIl9zdHlsZSR0cmFuc2l0aW9uRHVyYSIsIl9zdHlsZSR0cmFuc2l0aW9uVGltaSIsImdldFN2Z0ljb25VdGlsaXR5Q2xhc3MiLCJTdmdJY29uUm9vdCIsIl90aGVtZSRwYWxldHRlJG93bmVyUyIsIl90aGVtZSRwYWxldHRlJG93bmVyUzIiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwiU3ZnSWNvbiIsImh0bWxDb2xvciIsInRpdGxlQWNjZXNzIiwidmlld0JveCIsImZvY3VzYWJsZSIsInBhdGgiLCJ3YWl0IiwiZGVib3VuY2VkIiwiY2xlYXIiLCJ2YWxpZGF0b3IiLCJyZWFzb24iLCJjb21wb25lbnROYW1lSW5FcnJvciIsImxvY2F0aW9uIiwicHJvcEZ1bGxOYW1lIiwiY29udHJvbGxlZCIsImRlZmF1bHRQcm9wIiwiaXNDb250cm9sbGVkIiwidmFsdWVTdGF0ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJtdWlOYW1lcyIsImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCIsImhhZEtleWJvYXJkRXZlbnQiLCJoYWRGb2N1c1Zpc2libGVSZWNlbnRseSIsImlucHV0VHlwZXNXaGl0ZWxpc3QiLCJ1cmwiLCJ0ZWwiLCJlbWFpbCIsInBhc3N3b3JkIiwibnVtYmVyIiwiZGF0ZSIsIm1vbnRoIiwid2VlayIsInRpbWUiLCJkYXRldGltZSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJjdHJsS2V5IiwiaGFuZGxlUG9pbnRlckRvd24iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwidmlzaWJpbGl0eVN0YXRlIiwibWF0Y2hlcyIsInJlYWRPbmx5IiwiaXNDb250ZW50RWRpdGFibGUiLCJmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eSIsImlzRm9jdXNWaXNpYmxlIiwiU3R5bGVkRW5naW5lUHJvdmlkZXIiLCJpbmplY3RGaXJzdCIsIkMiLCJsb2NhbFRoZW1lIiwib3V0ZXJUaGVtZSIsIm1lcmdlT3V0ZXJMb2NhbFRoZW1lIiwibmVzdGVkIiwiSW5uZXJUaGVtZVByb3ZpZGVyIiwic20iLCJtZCIsImxnIiwieGwiLCJkZWZhdWx0QnJlYWtwb2ludHMiLCJoYW5kbGVCcmVha3BvaW50cyIsInByb3BWYWx1ZSIsInN0eWxlRnJvbVByb3BWYWx1ZSIsInRoZW1lQnJlYWtwb2ludHMiLCJicmVha3BvaW50IiwiY3NzS2V5IiwiY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0IiwiYnJlYWtwb2ludHNJbnB1dCIsIl9icmVha3BvaW50c0lucHV0JGtleSIsInJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIiwiYnJlYWtwb2ludEtleXMiLCJicmVha3BvaW50T3V0cHV0IiwiY2xhbXAiLCJtaW4iLCJkZWNvbXBvc2VDb2xvciIsImNoYXJBdCIsInJlIiwiUmVnRXhwIiwiY29sb3JzIiwibiIsImhleFRvUmdiIiwibWFya2VyIiwiY29sb3JTcGFjZSIsInNoaWZ0IiwicGFyc2VGbG9hdCIsInJlY29tcG9zZUNvbG9yIiwiZ2V0THVtaW5hbmNlIiwicmdiIiwicyIsImwiLCJmIiwiaHNsVG9SZ2IiLCJ2YWwiLCJnZXRDb250cmFzdFJhdGlvIiwiZm9yZWdyb3VuZCIsImx1bUEiLCJsdW1CIiwiYWxwaGEiLCJkYXJrZW4iLCJjb2VmZmljaWVudCIsImxpZ2h0ZW4iLCJlbXBoYXNpemUiLCJzcGFjaW5nSW5wdXQiLCJzaGFwZUlucHV0Iiwic3RlcCIsInNvcnRlZFZhbHVlcyIsImJyZWFrcG9pbnRzQXNBcnJheSIsImJyZWFrcG9pbnQxIiwiYnJlYWtwb2ludDIiLCJzb3J0QnJlYWtwb2ludHNWYWx1ZXMiLCJiZXR3ZWVuIiwiZW5kSW5kZXgiLCJvbmx5Iiwibm90Iiwia2V5SW5kZXgiLCJjcmVhdGVCcmVha3BvaW50cyIsIm11aSIsImFyZ3NJbnB1dCIsImNyZWF0ZVNwYWNpbmciLCJoYW5kbGVycyIsImdldEJvcmRlciIsInRoZW1lS2V5IiwiYm9yZGVyUmlnaHQiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsInRyYW5zZm9ybWVyIiwiY3NzUHJvcGVydHkiLCJnYXAiLCJjb2x1bW5HYXAiLCJyb3dHYXAiLCJfcHJvcHMkdGhlbWUiLCJfcHJvcHMkdGhlbWUkYnJlYWtwb2kiLCJfcHJvcHMkdGhlbWUkYnJlYWtwb2kyIiwiZm9udFN0eWxlIiwiZmlsdGVyUHJvcHNNYXBwaW5nIiwiYm9yZGVycyIsImZsZXhib3giLCJncmlkIiwicG9zaXRpb25zIiwic2l6aW5nIiwicHJvcGVydGllcyIsIm0iLCJwIiwiZGlyZWN0aW9ucyIsInIiLCJhbGlhc2VzIiwibWFyZ2luWCIsIm1hcmdpblkiLCJwYWRkaW5nWCIsInBhZGRpbmdZIiwiZ2V0Q3NzUHJvcGVydGllcyIsImRpciIsIm1lbW9pemUiLCJtYXJnaW5LZXlzIiwicGFkZGluZ0tleXMiLCJzcGFjaW5nS2V5cyIsImNyZWF0ZVVuYXJ5VW5pdCIsImRlZmF1bHRWYWx1ZSIsIl9nZXRQYXRoIiwidGhlbWVTcGFjaW5nIiwiY3JlYXRlVW5hcnlTcGFjaW5nIiwiZ2V0VmFsdWUiLCJ0cmFuc2Zvcm1lZCIsImNzc1Byb3BlcnRpZXMiLCJnZXRTdHlsZUZyb21Qcm9wVmFsdWUiLCJyZXNvbHZlQ3NzUHJvcGVydHkiLCJnZXRQYXRoIiwiY2hlY2tWYXJzIiwidmFycyIsInRoZW1lTWFwcGluZyIsInByb3BWYWx1ZUZpbmFsIiwidXNlclZhbHVlIiwiY29udGV4dFRoZW1lIiwidXNlVGhlbWVXaXRob3V0RGVmYXVsdCIsInRvVXBwZXJDYXNlIiwiZnVuY3MiLCJpc1BsYWluT2JqZWN0Iiwic291cmNlIiwiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwiY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRlZmF1bHRWaWV3IiwicmVmQSIsInJlZkIiLCJyZWZWYWx1ZSIsImdsb2JhbElkIiwibWF5YmVSZWFjdFVzZUlkIiwiaWRPdmVycmlkZSIsInJlYWN0SWQiLCJkZWZhdWx0SWQiLCJzZXREZWZhdWx0SWQiLCJ1c2VHbG9iYWxJZCIsInJlYWN0SXMiLCJSRUFDVF9TVEFUSUNTIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJjb250ZXh0VHlwZSIsImNvbnRleHRUeXBlcyIsImdldERlZmF1bHRQcm9wcyIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJjYWxsZWUiLCJhcml0eSIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwiaXNNZW1vIiwiRm9yd2FyZFJlZiIsIk1lbW8iLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJvYmplY3RQcm90b3R5cGUiLCJtb2R1bGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImluaGVyaXRlZENvbXBvbmVudCIsInRhcmdldFN0YXRpY3MiLCJzb3VyY2VTdGF0aWNzIiwiZGVzY3JpcHRvciIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvT2JqZWN0IiwiVHlwZUVycm9yIiwidGVzdDEiLCJ0ZXN0MiIsInRlc3QzIiwibGV0dGVyIiwiZXJyIiwic2hvdWxkVXNlTmF0aXZlIiwic3ltYm9scyIsImciLCJxIiwidiIsInUiLCIkJHR5cGVvZiIsIkEiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJMYXp5IiwiUG9ydGFsIiwiUHJvZmlsZXIiLCJTdHJpY3RNb2RlIiwiU3VzcGVuc2UiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlT2YiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiaW5pdGlhbFN0YXR1cyIsImFwcGVhclN0YXR1cyIsInVubW91bnRPbkV4aXQiLCJtb3VudE9uRW50ZXIiLCJzdGF0dXMiLCJuZXh0Q2FsbGJhY2siLCJwcmV2U3RhdGUiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY2FuY2VsTmV4dENhbGxiYWNrIiwiZ2V0VGltZW91dHMiLCJtb3VudGluZyIsImZvcmNlUmVmbG93IiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJfdGhpczIiLCJhcHBlYXJpbmciLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0Iiwic2FmZVNldFN0YXRlIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwiY2FuY2VsIiwibmV4dFN0YXRlIiwic2V0TmV4dENhbGxiYWNrIiwiX3RoaXM0IiwiaGFuZGxlciIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwibm9vcCIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwiUmVhY3RDdXJyZW50T3duZXIiLCJfX3NlbGYiLCJfX3NvdXJjZSIsIl9vd25lciIsImpzeHMiLCJfX2VzTW9kdWxlIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9leHRlbmRzIiwiX2luaGVyaXRzTG9vc2UiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/79.js.LICENSE.txt b/server-data/resources/[phone]/npwd_crypto/web/dist/79.js.LICENSE.txt deleted file mode 100644 index bc31eaa61..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/79.js.LICENSE.txt +++ /dev/null @@ -1,29 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/** @license MUI v5.10.1 - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license React v17.0.2 - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/799.js b/server-data/resources/[phone]/npwd_crypto/web/dist/799.js deleted file mode 100644 index b356a9708..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/799.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[799],{7951:(e,t,n)=>{n.d(t,{Z:()=>m});var r=n(6038),a=n(5974),l=n(2950),o=n.n(l),c=n(5137),i=n(6115),u=c.Z[500],s=(i.Z.white,i.Z.white),d=(i.Z.black,{light:{palette:{mode:"light",primary:{main:u,dark:c.Z[700],light:c.Z[300],contrastText:s},secondary:{main:"#d32f2f",light:"#eb4242",dark:"#941212",contrastText:s}}},dark:{palette:{mode:"dark",primary:{main:u,dark:c.Z[700],light:c.Z[300],contrastText:s},secondary:{main:"#d32f2f",light:"#eb4242",dark:"#941212",contrastText:s}}}});const m=function(e){var t=e.children,n=e.mode,l=d[n],c=(0,r.Z)(l);return o().createElement(a.Z,{theme:c},t)}},5210:(e,t,n)=>{n.d(t,{S:()=>a});var r=n(2453),a={currentValue:(0,r.atom)({key:"currentValue",default:1}),balance:(0,r.atom)({key:"balance",default:0}),history:(0,r.atom)({key:"history",default:[38,42,56,56,69,32,48,50,57,57]}),transactions:(0,r.atom)({key:"transactions",default:[]})}},2858:(e,t,n)=>{n.d(t,{w:()=>u});var r=n(2950),a=n.n(r),l=n(799),o=n(417),c=n(7109),i=n(8584),u=function(e){var t=e.heading,n=e.text,r=e.icon;return a().createElement(l.ZP,null,a().createElement(o.Z,null,a().createElement(c.Z,null,r)),a().createElement(i.Z,{primary:t,secondary:n}))}},1551:(e,t,n)=>{n.d(t,{Z:()=>s});var r,a,l=n(2950),o=n.n(l),c=n(2734),i=n(245),u=n(6790).Z.div(d||(r=["\n display: flex;\n align-items: center;\n\n min-height: ",";\n padding-left: 1.5rem;\n background-color: ",";\n"],a=["\n display: flex;\n align-items: center;\n\n min-height: ",";\n padding-left: 1.5rem;\n background-color: ",";\n"],Object.defineProperty?Object.defineProperty(r,"raw",{value:a}):r.raw=a,d=r),"4rem",(function(e){return e.backgroundColor}));const s=function(e){var t=e.children,n=(0,c.Z)();return o().createElement(u,{backgroundColor:n.palette.primary.main},o().createElement(i.Z,{variant:"h5",color:"primary.contrastText"},t))};var d},3971:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(2950),a=n.n(r),l=n(4172),o=n(2004),c=n(5662),i=n(3334),u=n(1233),s=n(5542);const d=function(){var e=(0,c.useLocation)().pathname,t=(0,r.useState)(e),n=t[0],d=t[1];return a().createElement(l.Z,{value:n,onChange:function(e,t){d(t)},showLabels:!0,sx:{width:"100%"}},a().createElement(o.Z,{label:"Portfolio",value:"/crypto",component:c.NavLink,icon:a().createElement(i.Z,null),to:"/crypto"}),a().createElement(o.Z,{label:"Market History",value:"/crypto/history",color:"secondary",component:c.NavLink,icon:a().createElement(u.Z,null),to:"/crypto/history"}),a().createElement(o.Z,{label:"Transactions",value:"/crypto/transactions",color:"secondary",component:c.NavLink,icon:a().createElement(s.Z,null),to:"/crypto/transactions"}))}},3377:(e,t,n)=>{n.d(t,{v:()=>d});var r=n(2950),a=n.n(r),l=n(5282),o=n(6831),c=n(442),i=n(245),u=function(){return u=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{n.d(t,{S:()=>l,Z:()=>o});var r=n(2950),a=n.n(r),l=(0,r.createContext)(null);const o=function(e){var t=e.children,n=(0,r.useState)(!1),o=n[0],c=n[1],i=(0,r.useState)(null),u=i[0],s=i[1];return a().createElement(l.Provider,{value:{alert:u,addAlert:function(e){s(e),c(!0)},handleClose:function(){c(!1)},isOpen:o}},t)}},6831:(e,t,n)=>{n.d(t,{D:()=>l});var r=n(2950),a=n(7030),l=function(){return(0,r.useContext)(a.S)}},9085:(e,t,n)=>{n.d(t,{Z:()=>r});const r=function(e,t,n){return r=this,a=void 0,o=function(){var n;return function(e,t){var n,r,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function c(l){return function(c){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(a=2&l[0]?r.return:l[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,l[1])).done)return a;switch(r=0,a&&(l=[2&l[0],a.value]),l[0]){case 0:case 1:a=l;break;case 4:return o.label++,{value:l[1],done:!1};case 5:o.label++,r=l[1],l=[0];continue;case 7:l=o.ops.pop(),o.trys.pop();continue;default:if(!((a=(a=o.trys).length>0&&a[a.length-1])||6!==l[0]&&2!==l[0])){o=0;continue}if(3===l[0]&&(!a||l[1]>a[0]&&l[1]{n.d(t,{A:()=>b});var r=n(2950),a=n.n(r),l=n(7e3),o=n(7675),c=n(5137),i=n(3486),u=n(265),s=n(3839),d=n.n(s),m=n(2734),f=n(6501),p=n(245),h=n(2453),y=n(5210);l.Chart.register(l.CategoryScale,l.LinearScale,l.PointElement,l.LineElement,l.Title,l.Tooltip,l.Legend);var v,g,E,Z=d().div(v||(g=["\n display: grid;\n grid-template-rows: 3fr 1fr;\n height: calc(100% - 3.5rem);\n place-items: center;\n"],E=["\n display: grid;\n grid-template-rows: 3fr 1fr;\n height: calc(100% - 3.5rem);\n place-items: center;\n"],Object.defineProperty?Object.defineProperty(g,"raw",{value:E}):g.raw=E,v=g)),b=function(){var e,t,n=(0,h.useRecoilValue)(y.S.history),r=n.length,l=new Array(r).fill(""),s="dark"===(0,m.Z)().palette.mode,d={labels:l,datasets:[{data:n,borderColor:c.Z[500],backgroundColor:c.Z[700],tension:.2}]},v=(e=n[0],(t=n[r-1])>e?[1,((t-e)/e*100).toFixed(2)]:[0,((t-e)/t*-1*100).toFixed(2)]),g=v[0],E=v[1];return a().createElement(Z,null,a().createElement(o.Line,{options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){return"$"+e.raw}}}},scales:{y:{min:0,ticks:{callback:function(e){return"$"+e}},grid:{display:!1,borderColor:s?"#f5f5f5":"#3F3F3FA6"}},x:{grid:{display:!1,borderColor:s?"#f5f5f5":"#3F3F3FA6"}}}},data:d}),a().createElement(f.Z,{sx:{height:50,width:"90%",display:"flex",justifyContent:"center",alignItems:"center"},elevation:3,variant:"outlined"},a().createElement(p.Z,{sx:{color:1===g?i.Z[500]:u.Z[500],fontWeight:"bold"}},1===g?"Up "+E+"%":"Down "+E+"%")))}},8087:(e,t,n)=>{n.d(t,{_:()=>D});var r,a,l=n(2950),o=n.n(l),c=n(6501),i=n(6123),u=n(7709),s=n(6914),d=n(3839),m=n.n(d),f=n(6857),p=n(62),h=n(5414),y=n(2440),v=n(3334),g=n(9547),E=n(2858),Z=function(e){var t=e.value,n=e.balance;return o().createElement(y.Z,{sx:{width:"100%"}},o().createElement(E.w,{heading:"Balance",text:n.toString(),icon:o().createElement(v.Z,{fontSize:"medium",color:"primary"})}),o().createElement(E.w,{heading:"Cash Value",text:"$".concat((n*t).toFixed(2)),icon:o().createElement(f.Z,{fontSize:"medium",color:"primary"})}),o().createElement(E.w,{heading:"Crypto Worth",text:"$".concat(t),icon:o().createElement(g.Z,{fontSize:"medium",color:"primary"})}))},b=n(7645),w=n(7750),x=n(245),S=n(573),C=n(3447),k=n(3709),F=n(2453),T=n(5210),P=n(9085),O=n(6831),R=n(1268),j=function(e){var t=e.close,n=(0,l.useState)(""),r=n[0],a=n[1],c=(0,l.useState)(!1),i=c[0],u=c[1],d=(0,F.useRecoilValue)(T.S.currentValue),m=(0,F.useSetRecoilState)(T.S.balance),f=(0,O.D)().addAlert;return o().createElement(o().Fragment,null,o().createElement(b.Z,null," Confirm Purchase "),o().createElement(w.Z,null,r&&o().createElement(x.Z,null,"You will receive ",(parseFloat(r)/d).toFixed(2)," bits"),o().createElement(R.TextField,{value:r,onChange:function(e){a(e.target.value)},placeholder:"Amount",type:"number",error:i,InputProps:{startAdornment:o().createElement(S.Z,{position:"start",variant:"standard"},"$")}})),o().createElement(C.Z,null,o().createElement(s.Z,{variant:"text",color:"error",onClick:t},"Cancel"),o().createElement(s.Z,{variant:"text",color:"success",onClick:function(){var e=parseFloat(r);(0,P.Z)("npwd_crypto:tryBuyCrypto",{amount:e}).then((function(e){if("error"===e.status)return u(!0),f({message:e.data.reason,type:"error"});u(!1),m(e.data.newBal)}))}},"Confirm")))},A=function(e){var t=e.close,n=(0,l.useState)(""),r=n[0],a=n[1],c=(0,l.useState)(!1),i=c[0],u=c[1],d=(0,F.useRecoilValue)(T.S.currentValue),m=(0,F.useSetRecoilState)(T.S.balance),f=(0,O.D)().addAlert;return o().createElement(o().Fragment,null,o().createElement(b.Z,null," Confirm Sell "),o().createElement(w.Z,null,r&&o().createElement(x.Z,null,"You will receive $",parseFloat(r)*d),o().createElement(R.TextField,{value:r,onChange:function(e){a(e.target.value)},placeholder:"Amount",type:"number",error:i})),o().createElement(C.Z,null,o().createElement(s.Z,{variant:"text",color:"error",onClick:t},"Cancel"),o().createElement(s.Z,{variant:"text",color:"success",onClick:function(){var e=parseFloat(r);(0,P.Z)("npwd_crypto:trySellCrypto",{amount:e}).then((function(e){if("error"===e.status)return u(!0),f({message:e.data.reason,type:"error"});u(!1),m(e.data.newBal)}))}},"Confirm")))},V=function(e){var t=e.close,n=(0,l.useState)(""),r=n[0],a=n[1],c=(0,l.useState)(""),i=c[0],u=c[1],d=(0,l.useState)(!1),m=d[0],f=d[1],p=(0,F.useRecoilValue)(T.S.currentValue),h=(0,F.useSetRecoilState)(T.S.balance),y=(0,O.D)().addAlert;return o().createElement(o().Fragment,null,o().createElement(b.Z,null," Confirm Trade "),o().createElement(w.Z,null,r&&o().createElement(x.Z,null,"You will receive $",parseFloat(r)*p),o().createElement(k.Z,null,o().createElement(R.TextField,{value:r,onChange:function(e){a(e.target.value)},placeholder:"Amount",type:"number",error:m}),o().createElement(R.TextField,{value:i,onChange:function(e){u(e.target.value)},placeholder:"Player ID",type:"number",error:m}))),o().createElement(C.Z,null,o().createElement(s.Z,{variant:"text",color:"error",onClick:t},"Cancel"),o().createElement(s.Z,{variant:"text",color:"success",onClick:function(){var e=parseFloat(r),t=parseInt(i);(0,P.Z)("npwd_crypto:tryTradeCrypto",{amount:e,target:t}).then((function(e){if("error"===e.status)return f(!0),y({message:e.data.reason,type:"error"});f(!1),h(e.data.newBal)}))}},"Confirm")))},B=function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e},I=m().div(r||(r=B(["\n display: grid;\n grid-template-rows: 1fr 2fr;\n height: 90%;\n gap: 1.5rem;\n place-items: center;\n"],["\n display: grid;\n grid-template-rows: 1fr 2fr;\n height: 90%;\n gap: 1.5rem;\n place-items: center;\n"]))),D=function(){var e=(0,F.useRecoilValue)(T.S.balance),t=(0,F.useRecoilValue)(T.S.currentValue),n=(0,l.useState)(!1),r=n[0],a=n[1],u=(0,l.useState)(!1),s=u[0],d=u[1],m=(0,l.useState)(!1),f=m[0],p=m[1];return o().createElement(I,null,o().createElement(c.Z,{elevation:4,variant:"outlined",sx:{height:"100%",width:300,display:"flex",justifyContent:"center",alignItems:"center"}},o().createElement(Z,{value:t,balance:e})),o().createElement(_,{setBuyOpen:a,setSellOpen:d,setTradeOpen:p}),o().createElement(i.Z,{open:r,onClose:function(){return a(!1)},hideBackdrop:!0,disablePortal:!0},o().createElement(j,{close:function(){return a(!1)}})),o().createElement(i.Z,{open:s,onClose:function(){return d(!1)},hideBackdrop:!0,disablePortal:!0},o().createElement(A,{close:function(){return d(!1)}})),o().createElement(i.Z,{open:f,onClose:function(){return p(!1)},hideBackdrop:!0,disablePortal:!0},o().createElement(V,{close:function(){return p(!1)}})))},L=(0,u.ZP)(s.Z)({width:300,height:60}),$=m().div(a||(a=B(["\n display: grid;\n place-items: center;\n grid-template-rows: 1fr 1fr 1fr;\n gap: 1rem;\n"],["\n display: grid;\n place-items: center;\n grid-template-rows: 1fr 1fr 1fr;\n gap: 1rem;\n"]))),_=function(e){var t=e.setBuyOpen,n=e.setSellOpen,r=e.setTradeOpen;return o().createElement($,null,o().createElement(L,{variant:"contained",endIcon:o().createElement(p.Z,null),onClick:function(){return t(!0)}},"Buy"),o().createElement(L,{variant:"contained",endIcon:o().createElement(f.Z,null),onClick:function(){return n(!0)}},"Sell"),o().createElement(L,{variant:"contained",endIcon:o().createElement(h.Z,null),onClick:function(){return r(!0)}},"Transfer"))}},246:(e,t,n)=>{n.d(t,{P:()=>g});var r=n(2950),a=n.n(r),l=n(6857),o=n(62),c=n(5414),i=n(6501),u=n(2440),s=n(2116),d=n(2858),m=n(2453),f=n(5210),p=n(9085),h={bought:a().createElement(o.Z,{color:"error"}),sold:a().createElement(l.Z,{color:"success"}),transferred:a().createElement(c.Z,{color:"info"})},y={bought:"Purchase",sold:"Sold",transferred:"Transfer"},v=function(e,t,n,r){switch(e){case"bought":return"Bought ".concat(t," for $").concat(n);case"sold":return"Sold ".concat(t," for $").concat(n);case"transferred":return r?"Received ".concat(t," worth ").concat(n):"Sent ".concat(t," worth ").concat(n);default:return"Something's wrong here I can feel it."}},g=function(){var e=(0,m.useRecoilState)(f.S.transactions),t=e[0],n=e[1];return(0,r.useEffect)((function(){(0,p.Z)("npwd_crypto:fetchTransactions").then((function(e){n(e)}))}),[]),a().createElement(i.Z,{sx:{display:"flex",height:"100%",width:"100%",flexDirection:"column"},variant:"outlined",square:!0},a().createElement(u.Z,{dense:!0,sx:{width:"100%",overflowY:"auto",overflowX:"hidden"}},t.map((function(e,t){var n=e.type,r=e.amount,l=e.value,o=e.isReceiving;return a().createElement(a().Fragment,null,a().createElement(d.w,{heading:y[n],text:v(n,r,l,o),icon:h[n],key:t}),a().createElement(s.Z,null))}))))}}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBZSxXQUN0QixJQUFJbFAsR0FBSyxJQUFBbVAsZ0JBQWUsa0JBQXFCakosRUFBT2xHLEVBQUcsR0FBSW9QLEVBQVVwUCxFQUFHLEdBTXhFLE9BTEEsSUFBQXFQLFlBQVUsWUFDTixPQUFTLGlDQUFpQzFHLE1BQUssU0FBVW1FLEdBQ3JEc0MsRUFBUXRDLFFBRWIsSUFDSyxrQkFBb0IsSUFBTyxDQUFFekssR0FBSSxDQUNqQ3VDLFFBQVMsT0FDVEcsT0FBUSxPQUNSekMsTUFBTyxPQUNQZ04sY0FBZSxVQUNoQjVOLFFBQVMsV0FBWTZOLFFBQVEsR0FDaEMsa0JBQW9CLElBQU0sQ0FBRUMsT0FBTyxFQUFNbk4sR0FBSSxDQUNyQ0MsTUFBTyxPQUNQbU4sVUFBVyxPQUNYQyxVQUFXLFdBQ1Z4SixFQUFLeUosS0FBSSxTQUFVM1AsRUFBSTRQLEdBQzVCLElBQUl0SyxFQUFPdEYsRUFBR3NGLEtBQU1tRyxFQUFTekwsRUFBR3lMLE9BQVFqSyxFQUFReEIsRUFBR3dCLE1BQU95TixFQUFjalAsRUFBR2lQLFlBQzNFLE9BQVEsa0JBQW9CLGFBQWdCLEtBQ3hDLGtCQUFvQixJQUFnQixDQUFFbE8sUUFBU2dPLEVBQVN6SixHQUFPdEUsS0FBTWdPLEVBQWdCMUosRUFBTW1HLEVBQVFqSyxFQUFPeU4sR0FBY2hPLEtBQU0wTixFQUFNckosR0FBTzdFLElBQUttUCxJQUNoSixrQkFBb0IsSUFBUyIsInNvdXJjZXMiOlsid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2FwcC50aGVtZS50cyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy9UaGVtZVN3aXRjaFByb3ZpZGVyLnRzeCIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy9hdG9tcy9hcHAtYXRvbXMudHMiLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9zcmMvY29tcG9uZW50cy9BdmF0YXJMaXN0SXRlbS50c3giLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9zcmMvY29tcG9uZW50cy9IZWFkZXIudHN4Iiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2NvbXBvbmVudHMvTmF2QmFyLnRzeCIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy9jb21wb25lbnRzL3NuYWNrYmFyL0FsZXJ0LnRzeCIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy9jb21wb25lbnRzL3NuYWNrYmFyL1Bob25lU25hY2tiYXIudHN4Iiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2NvbXBvbmVudHMvc25hY2tiYXIvU25hY2tiYXJQcm92aWRlci50c3giLCJ3ZWJwYWNrOi8vbnB3ZF9jcnlwdG8vLi9zcmMvY29tcG9uZW50cy9zbmFja2Jhci91c2VTbmFja2Jhci50cyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy91dGlscy9mZXRjaE51aS50cyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy92aWV3cy9IaXN0b3J5LnRzeCIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL3NyYy92aWV3cy9Qb3J0Zm9saW8udHN4Iiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2NvbXBvbmVudHMvQmFsYW5jZUxpc3QudHN4Iiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL2NvbXBvbmVudHMvRGlhbG9ndWUudHN4Iiwid2VicGFjazovL25wd2RfY3J5cHRvLy4vc3JjL3ZpZXdzL1RyYW5zYWN0aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tbW9uLCBvcmFuZ2UgfSBmcm9tICdAbXVpL21hdGVyaWFsL2NvbG9ycyc7XG5leHBvcnQgdmFyIEFQUF9QUklNQVJZX0NPTE9SID0gb3JhbmdlWzUwMF07XG5leHBvcnQgdmFyIEFQUF9URVhUX0NPTE9SID0gY29tbW9uLndoaXRlO1xuZXhwb3J0IHZhciBMSUdIVF9BUFBfVEVYVF9DT0xPUiA9IGNvbW1vbi53aGl0ZTtcbmV4cG9ydCB2YXIgREFSS19BUFBfVEVYVF9DT0xPUiA9IGNvbW1vbi5ibGFjaztcbmV4cG9ydCB2YXIgbGlnaHRUaGVtZSA9IHtcbiAgICBwYWxldHRlOiB7XG4gICAgICAgIG1vZGU6ICdsaWdodCcsXG4gICAgICAgIHByaW1hcnk6IHtcbiAgICAgICAgICAgIG1haW46IEFQUF9QUklNQVJZX0NPTE9SLFxuICAgICAgICAgICAgZGFyazogb3JhbmdlWzcwMF0sXG4gICAgICAgICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICAgICAgICBjb250cmFzdFRleHQ6IExJR0hUX0FQUF9URVhUX0NPTE9SLFxuICAgICAgICB9LFxuICAgICAgICBzZWNvbmRhcnk6IHtcbiAgICAgICAgICAgIG1haW46ICcjZDMyZjJmJyxcbiAgICAgICAgICAgIGxpZ2h0OiAnI2ViNDI0MicsXG4gICAgICAgICAgICBkYXJrOiAnIzk0MTIxMicsXG4gICAgICAgICAgICBjb250cmFzdFRleHQ6IExJR0hUX0FQUF9URVhUX0NPTE9SLFxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnQgdmFyIGRhcmtUaGVtZSA9IHtcbiAgICBwYWxldHRlOiB7XG4gICAgICAgIG1vZGU6ICdkYXJrJyxcbiAgICAgICAgcHJpbWFyeToge1xuICAgICAgICAgICAgbWFpbjogQVBQX1BSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBkYXJrOiBvcmFuZ2VbNzAwXSxcbiAgICAgICAgICAgIGxpZ2h0OiBvcmFuZ2VbMzAwXSxcbiAgICAgICAgICAgIGNvbnRyYXN0VGV4dDogTElHSFRfQVBQX1RFWFRfQ09MT1IsXG4gICAgICAgIH0sXG4gICAgICAgIHNlY29uZGFyeToge1xuICAgICAgICAgICAgbWFpbjogJyNkMzJmMmYnLFxuICAgICAgICAgICAgbGlnaHQ6ICcjZWI0MjQyJyxcbiAgICAgICAgICAgIGRhcms6ICcjOTQxMjEyJyxcbiAgICAgICAgICAgIGNvbnRyYXN0VGV4dDogTElHSFRfQVBQX1RFWFRfQ09MT1IsXG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydCB2YXIgdGhlbWVzID0ge1xuICAgIGxpZ2h0OiBsaWdodFRoZW1lLFxuICAgIGRhcms6IGRhcmtUaGVtZSxcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVUaGVtZSwgVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHRoZW1lcyB9IGZyb20gJy4vYXBwLnRoZW1lJztcbnZhciBUaGVtZVN3aXRjaFByb3ZpZGVyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIG1vZGUgPSBfYS5tb2RlO1xuICAgIHZhciB0aGVtZU9wdGlvbnMgPSB0aGVtZXNbbW9kZV07XG4gICAgdmFyIHRoZW1lID0gY3JlYXRlVGhlbWUodGhlbWVPcHRpb25zKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZVByb3ZpZGVyLCB7IHRoZW1lOiB0aGVtZSB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGhlbWVTd2l0Y2hQcm92aWRlcjtcbiIsImltcG9ydCB7IGF0b20gfSBmcm9tIFwicmVjb2lsXCI7XG5leHBvcnQgdmFyIHN0YXRlID0ge1xuICAgIGN1cnJlbnRWYWx1ZTogYXRvbSh7XG4gICAgICAgIGtleTogJ2N1cnJlbnRWYWx1ZScsXG4gICAgICAgIGRlZmF1bHQ6IDFcbiAgICB9KSxcbiAgICBiYWxhbmNlOiBhdG9tKHtcbiAgICAgICAga2V5OiAnYmFsYW5jZScsXG4gICAgICAgIGRlZmF1bHQ6IDBcbiAgICB9KSxcbiAgICBoaXN0b3J5OiBhdG9tKHtcbiAgICAgICAga2V5OiAnaGlzdG9yeScsXG4gICAgICAgIGRlZmF1bHQ6IFszOCwgNDIsIDU2LCA1NiwgNjksIDMyLCA0OCwgNTAsIDU3LCA1N11cbiAgICB9KSxcbiAgICB0cmFuc2FjdGlvbnM6IGF0b20oe1xuICAgICAgICBrZXk6ICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICBkZWZhdWx0OiBbXVxuICAgIH0pXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQXZhdGFyLCBMaXN0SXRlbSwgTGlzdEl0ZW1BdmF0YXIsIExpc3RJdGVtVGV4dCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5leHBvcnQgdmFyIEF2YXRhckxpc3RJdGVtID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGhlYWRpbmcgPSBfYS5oZWFkaW5nLCB0ZXh0ID0gX2EudGV4dCwgaWNvbiA9IF9hLmljb247XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KExpc3RJdGVtLCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3RJdGVtQXZhdGFyLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBdmF0YXIsIG51bGwsIGljb24pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbVRleHQsIHsgcHJpbWFyeTogaGVhZGluZywgc2Vjb25kYXJ5OiB0ZXh0IH0pKSk7XG59O1xuIiwidmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gKHRoaXMgJiYgdGhpcy5fX21ha2VUZW1wbGF0ZU9iamVjdCkgfHwgZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgICByZXR1cm4gY29va2VkO1xufTtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUeXBvZ3JhcGh5LCB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuZXhwb3J0IHZhciBIRUFERVJfSEVJR0hUID0gJzRyZW0nO1xudmFyIENvbnRhaW5lciA9IHN0eWxlZC5kaXYodGVtcGxhdGVPYmplY3RfMSB8fCAodGVtcGxhdGVPYmplY3RfMSA9IF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtcIlxcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICBtaW4taGVpZ2h0OiBcIiwgXCI7XFxuICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6IFwiLCBcIjtcXG5cIl0sIFtcIlxcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICBtaW4taGVpZ2h0OiBcIiwgXCI7XFxuICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6IFwiLCBcIjtcXG5cIl0pKSwgSEVBREVSX0hFSUdIVCwgZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGJhY2tncm91bmRDb2xvciA9IF9hLmJhY2tncm91bmRDb2xvcjtcbiAgICByZXR1cm4gYmFja2dyb3VuZENvbG9yO1xufSk7XG52YXIgSGVhZGVyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX2EuY2hpbGRyZW47XG4gICAgdmFyIHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCB7IGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUeXBvZ3JhcGh5LCB7IHZhcmlhbnQ6IFwiaDVcIiwgY29sb3I6IFwicHJpbWFyeS5jb250cmFzdFRleHRcIiB9LCBjaGlsZHJlbikpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBIZWFkZXI7XG52YXIgdGVtcGxhdGVPYmplY3RfMTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJvdHRvbU5hdmlnYXRpb24sIEJvdHRvbU5hdmlnYXRpb25BY3Rpb24gfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IE5hdkxpbmssIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgQWNjb3VudEJhbGFuY2VXYWxsZXRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQWNjb3VudEJhbGFuY2VXYWxsZXQnO1xuaW1wb3J0IFRpbWVsaW5lSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1RpbWVsaW5lJztcbmltcG9ydCBDdXJyZW5jeUV4Y2hhbmdlSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0N1cnJlbmN5RXhjaGFuZ2UnO1xudmFyIE5hdkJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbigpLnBhdGhuYW1lO1xuICAgIHZhciBfYSA9IHVzZVN0YXRlKHBhdGhuYW1lKSwgcGFnZSA9IF9hWzBdLCBzZXRQYWdlID0gX2FbMV07XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChfZSwgbmV3UGFnZSkge1xuICAgICAgICBzZXRQYWdlKG5ld1BhZ2UpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJvdHRvbU5hdmlnYXRpb24sIHsgdmFsdWU6IHBhZ2UsIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsIHNob3dMYWJlbHM6IHRydWUsIHN4OiB7XG4gICAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3R0b21OYXZpZ2F0aW9uQWN0aW9uLCB7IGxhYmVsOiBcIlBvcnRmb2xpb1wiLCB2YWx1ZTogXCIvY3J5cHRvXCIsIGNvbXBvbmVudDogTmF2TGluaywgaWNvbjogUmVhY3QuY3JlYXRlRWxlbWVudChBY2NvdW50QmFsYW5jZVdhbGxldEljb24sIG51bGwpLCB0bzogXCIvY3J5cHRvXCIgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQm90dG9tTmF2aWdhdGlvbkFjdGlvbiwgeyBsYWJlbDogXCJNYXJrZXQgSGlzdG9yeVwiLCB2YWx1ZTogXCIvY3J5cHRvL2hpc3RvcnlcIiwgY29sb3I6IFwic2Vjb25kYXJ5XCIsIGNvbXBvbmVudDogTmF2TGluaywgaWNvbjogUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lbGluZUljb24sIG51bGwpLCB0bzogXCIvY3J5cHRvL2hpc3RvcnlcIiB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3R0b21OYXZpZ2F0aW9uQWN0aW9uLCB7IGxhYmVsOiBcIlRyYW5zYWN0aW9uc1wiLCB2YWx1ZTogXCIvY3J5cHRvL3RyYW5zYWN0aW9uc1wiLCBjb2xvcjogXCJzZWNvbmRhcnlcIiwgY29tcG9uZW50OiBOYXZMaW5rLCBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1cnJlbmN5RXhjaGFuZ2VJY29uLCBudWxsKSwgdG86IFwiL2NyeXB0by90cmFuc2FjdGlvbnNcIiB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IE5hdkJhcjtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNdWlBbGVydCBmcm9tICdAbXVpL21hdGVyaWFsL0FsZXJ0JztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmV4cG9ydCB2YXIgQWxlcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KE11aUFsZXJ0LCBfX2Fzc2lnbih7IHN4OiB7XG4gICAgICAgICAgICB6SW5kZXg6IDEwMDAwLFxuICAgICAgICB9LCBlbGV2YXRpb246IDQsIHZhcmlhbnQ6IFwiZmlsbGVkXCIgfSwgcHJvcHMsIHsgcmVmOiByZWYgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHlwb2dyYXBoeSwgeyBzeDoge1xuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgICAgICAgICAgICAgIHdvcmRXcmFwOiAnYnJlYWstd29yZCcsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcxLjFlbScsXG4gICAgICAgICAgICB9IH0sIHByb3BzLmNoaWxkcmVuKSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBBbGVydDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgdXNlU25hY2tiYXIgfSBmcm9tICcuL3VzZVNuYWNrYmFyJztcbmltcG9ydCBBbGVydCBmcm9tICcuL0FsZXJ0JztcbmV4cG9ydCB2YXIgUGhvbmVTbmFja2JhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIF9iID0gdXNlU25hY2tiYXIoKSwgYWxlcnQgPSBfYi5hbGVydCwgaXNPcGVuID0gX2IuaXNPcGVuLCBoYW5kbGVDbG9zZSA9IF9iLmhhbmRsZUNsb3NlO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChTbmFja2JhciwgeyBhdXRvSGlkZUR1cmF0aW9uOiAoX2EgPSBhbGVydCA9PT0gbnVsbCB8fCBhbGVydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWxlcnQuZHVyYXRpb24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDMwMDAsIG9wZW46IGlzT3Blbiwgc3g6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGJvdHRvbTogNzUsXG4gICAgICAgICAgICBsZWZ0OiAnMCAhaW1wb3J0YW50JyxcbiAgICAgICAgICAgIHJpZ2h0OiAnMCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSwgb25DbG9zZTogaGFuZGxlQ2xvc2UgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbGVydCwgeyBzZXZlcml0eTogKGFsZXJ0ID09PSBudWxsIHx8IGFsZXJ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhbGVydC50eXBlKSB8fCAnaW5mbycsIG9uQ2xvc2U6IGhhbmRsZUNsb3NlIH0sIChhbGVydCA9PT0gbnVsbCB8fCBhbGVydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWxlcnQubWVzc2FnZSkgfHwgJycpKSk7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLy8gQHRzLWlnbm9yZVxuZXhwb3J0IHZhciBTbmFja2JhckNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xudmFyIFNuYWNrYmFyUHJvdmlkZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShmYWxzZSksIGlzT3BlbiA9IF9iWzBdLCBzZXRPcGVuID0gX2JbMV07XG4gICAgdmFyIF9jID0gdXNlU3RhdGUobnVsbCksIGFsZXJ0ID0gX2NbMF0sIHNldEFsZXJ0ID0gX2NbMV07XG4gICAgdmFyIGFkZEFsZXJ0ID0gZnVuY3Rpb24gKGFsZXJ0KSB7XG4gICAgICAgIHNldEFsZXJ0KGFsZXJ0KTtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVDbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU25hY2tiYXJDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7XG4gICAgICAgICAgICBhbGVydDogYWxlcnQsXG4gICAgICAgICAgICBhZGRBbGVydDogYWRkQWxlcnQsXG4gICAgICAgICAgICBoYW5kbGVDbG9zZTogaGFuZGxlQ2xvc2UsXG4gICAgICAgICAgICBpc09wZW46IGlzT3BlblxuICAgICAgICB9IH0sIGNoaWxkcmVuKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgU25hY2tiYXJQcm92aWRlcjtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTbmFja2JhckNvbnRleHQgfSBmcm9tICcuL1NuYWNrYmFyUHJvdmlkZXInO1xuZXhwb3J0IHZhciB1c2VTbmFja2JhciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZUNvbnRleHQoU25hY2tiYXJDb250ZXh0KTsgfTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG4vKipcbiAqIFNpbXBsZSB3cmFwcGVyIGFyb3VuZCBmZXRjaCBBUEkgdGFpbG9yZWQgZm9yIENFRi9OVUkgdXNlLlxuICogQHBhcmFtIGV2ZW50TmFtZSAtIFRoZSBlbmRwb2ludCBldmVudG5hbWUgdG8gdGFyZ2V0XG4gKiBAcGFyYW0gZGF0YSAtIERhdGEgeW91IHdpc2ggdG8gc2VuZCBpbiB0aGUgTlVJIENhbGxiYWNrXG4gKlxuICogQHJldHVybiByZXR1cm5EYXRhIC0gQSBwcm9taXNlIGZvciB0aGUgZGF0YSBzZW50IGJhY2sgYnkgdGhlIE51aUNhbGxiYWNrcyBDQiBhcmd1bWVudFxuICovXG5pbXBvcnQgeyBpc0VudkJyb3dzZXIgfSBmcm9tICcuL21pc2MnO1xuZnVuY3Rpb24gZmV0Y2hOdWkoZXZlbnROYW1lLCBkYXRhLCBtb2NrUmVzcCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMsIHJlc291cmNlTmFtZSwgcmVzcCwgcmVzcG9uc2VPYmo7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnZCcm93c2VyKCkgJiYgbW9ja1Jlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBtb2NrUmVzcF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lID0gJ25wd2RfY3J5cHRvJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZmV0Y2goXCJodHRwczovL1wiLmNvbmNhdChyZXNvdXJjZU5hbWUsIFwiL1wiKS5jb25jYXQoZXZlbnROYW1lKSwgb3B0aW9ucyldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmVzcCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcmVzcC5qc29uKCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VPYmogPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXNwb25zZU9ial07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgZmV0Y2hOdWk7XG4iLCJ2YXIgX19tYWtlVGVtcGxhdGVPYmplY3QgPSAodGhpcyAmJiB0aGlzLl9fbWFrZVRlbXBsYXRlT2JqZWN0KSB8fCBmdW5jdGlvbiAoY29va2VkLCByYXcpIHtcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICAgIHJldHVybiBjb29rZWQ7XG59O1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXJ0IGFzIENoYXJ0SlMsIENhdGVnb3J5U2NhbGUsIExpbmVhclNjYWxlLCBQb2ludEVsZW1lbnQsIExpbmVFbGVtZW50LCBUaXRsZSwgVG9vbHRpcCwgTGVnZW5kLCB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IExpbmUgfSBmcm9tICdyZWFjdC1jaGFydGpzLTInO1xuaW1wb3J0IHsgZ3JlZW4sIG9yYW5nZSwgcmVkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJzdHlsZWQtY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgUGFwZXIsIFR5cG9ncmFwaHksIHVzZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVJlY29pbFZhbHVlIH0gZnJvbSBcInJlY29pbFwiO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICcuLi9hdG9tcy9hcHAtYXRvbXMnO1xuQ2hhcnRKUy5yZWdpc3RlcihDYXRlZ29yeVNjYWxlLCBMaW5lYXJTY2FsZSwgUG9pbnRFbGVtZW50LCBMaW5lRWxlbWVudCwgVGl0bGUsIFRvb2x0aXAsIExlZ2VuZCk7XG52YXIgQ29udGFpbmVyID0gc3R5bGVkLmRpdih0ZW1wbGF0ZU9iamVjdF8xIHx8ICh0ZW1wbGF0ZU9iamVjdF8xID0gX19tYWtlVGVtcGxhdGVPYmplY3QoW1wiXFxuICBkaXNwbGF5OiBncmlkO1xcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAzZnIgMWZyO1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG5cIl0sIFtcIlxcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGdyaWQtdGVtcGxhdGUtcm93czogM2ZyIDFmcjtcXG4gIGhlaWdodDogY2FsYygxMDAlIC0gMy41cmVtKTtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuXCJcbiAgICAvLyBSZXR1cm5zIDEgaWYgdXAsIDAgaWYgZG93blxuXSkpKTtcbi8vIFJldHVybnMgMSBpZiB1cCwgMCBpZiBkb3duXG52YXIgZ2V0UGVyY2VudERpZmZlcmVuY2UgPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID4gbWluKSB7XG4gICAgICAgIHZhciBkaWZmZXJlbmNlID0gKG1heCAtIG1pbikgLyBtaW47XG4gICAgICAgIHZhciBwZXJjZW50ID0gKGRpZmZlcmVuY2UgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgICAgIHJldHVybiBbMSwgcGVyY2VudF07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9ICgobWF4IC0gbWluKSAvIG1heCkgKiAtMTsgLy8gUmVtb3ZlIG5lZ2F0aXZlIGJlY2F1c2UgaW52ZXJzZSBwZXJjZW50YWdlXG4gICAgICAgIHZhciBwZXJjZW50ID0gKGRpZmZlcmVuY2UgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgICAgIHJldHVybiBbMCwgcGVyY2VudF07XG4gICAgfVxufTtcbmV4cG9ydCB2YXIgSGlzdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJpY2VIaXN0b3J5ID0gdXNlUmVjb2lsVmFsdWUoc3RhdGUuaGlzdG9yeSk7XG4gICAgdmFyIExFTkdUSCA9IHByaWNlSGlzdG9yeS5sZW5ndGg7XG4gICAgdmFyIGxhYmVscyA9IG5ldyBBcnJheShMRU5HVEgpLmZpbGwoXCJcIik7XG4gICAgdmFyIHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICB2YXIgaXNEYXJrbW9kZSA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnO1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgICBsYWJlbHM6IGxhYmVscyxcbiAgICAgICAgZGF0YXNldHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmljZUhpc3RvcnksXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9yYW5nZVs1MDBdLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogb3JhbmdlWzcwMF0sXG4gICAgICAgICAgICAgICAgdGVuc2lvbjogMC4yXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgdmFyIF9hID0gZ2V0UGVyY2VudERpZmZlcmVuY2UocHJpY2VIaXN0b3J5WzBdLCBwcmljZUhpc3RvcnlbTEVOR1RIIC0gMV0pLCB1cCA9IF9hWzBdLCBwZXJjZW50ID0gX2FbMV07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaW5lLCB7IG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZnVuY3Rpb24gKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIkXCIgKyBjdHgucmF3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gJyQnICsgdmFsdWU7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFya21vZGUgPyBcIiNmNWY1ZjVcIiA6IFwiIzNGM0YzRkE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogaXNEYXJrbW9kZSA/IFwiI2Y1ZjVmNVwiIDogXCIjM0YzRjNGQTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIGRhdGE6IGRhdGEgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFwZXIsIHsgc3g6IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjkwJVwiLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICB9LCBlbGV2YXRpb246IDMsIHZhcmlhbnQ6IFwib3V0bGluZWRcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUeXBvZ3JhcGh5LCB7IHN4OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB1cCA9PT0gMSA/IGdyZWVuWzUwMF0gOiByZWRbNTAwXSxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCJib2xkXCJcbiAgICAgICAgICAgICAgICB9IH0sIHVwID09PSAxID9cbiAgICAgICAgICAgICAgICBcIlVwIFwiICsgcGVyY2VudCArIFwiJVwiIDpcbiAgICAgICAgICAgICAgICBcIkRvd24gXCIgKyBwZXJjZW50ICsgXCIlXCIpKSkpO1xufTtcbnZhciB0ZW1wbGF0ZU9iamVjdF8xO1xuIiwidmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gKHRoaXMgJiYgdGhpcy5fX21ha2VUZW1wbGF0ZU9iamVjdCkgfHwgZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgICByZXR1cm4gY29va2VkO1xufTtcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiwgUGFwZXIsIHN0eWxlZCBhcyBNdWlTdHlsZWQsIERpYWxvZywgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwic3R5bGVkLWNvbXBvbmVudHNcIjtcbmltcG9ydCBDYXNoVmFsdWUgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9BdHRhY2hNb25leSc7XG5pbXBvcnQgU2VsbEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9TZWxsJztcbmltcG9ydCBUcmFuc2ZlciBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1N1YmRpcmVjdG9yeUFycm93UmlnaHQnO1xuaW1wb3J0IHsgQmFsYW5jZUxpc3QgfSBmcm9tICcuLi9jb21wb25lbnRzL0JhbGFuY2VMaXN0JztcbmltcG9ydCB7IEJ1eURpYWxvZ3VlLCBTZWxsRGlhbG9ndWUsIFRyYWRlRGlhbG9ndWUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9EaWFsb2d1ZVwiO1xuaW1wb3J0IHsgdXNlUmVjb2lsVmFsdWUgfSBmcm9tIFwicmVjb2lsXCI7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJy4uL2F0b21zL2FwcC1hdG9tcyc7XG52YXIgQ29udGFpbmVyID0gc3R5bGVkLmRpdih0ZW1wbGF0ZU9iamVjdF8xIHx8ICh0ZW1wbGF0ZU9iamVjdF8xID0gX19tYWtlVGVtcGxhdGVPYmplY3QoW1wiXFxuICBkaXNwbGF5OiBncmlkO1xcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMmZyO1xcbiAgaGVpZ2h0OiA5MCU7XFxuICBnYXA6IDEuNXJlbTtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuXCJdLCBbXCJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmciAyZnI7XFxuICBoZWlnaHQ6IDkwJTtcXG4gIGdhcDogMS41cmVtO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG5cIl0pKSk7XG5leHBvcnQgdmFyIFBvcnRmb2xpbyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYmFsYW5jZSA9IHVzZVJlY29pbFZhbHVlKHN0YXRlLmJhbGFuY2UpO1xuICAgIHZhciB2YWx1ZSA9IHVzZVJlY29pbFZhbHVlKHN0YXRlLmN1cnJlbnRWYWx1ZSk7XG4gICAgdmFyIF9hID0gdXNlU3RhdGUoZmFsc2UpLCBidXlPcGVuID0gX2FbMF0sIHNldEJ1eU9wZW4gPSBfYVsxXTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShmYWxzZSksIHNlbGxPcGVuID0gX2JbMF0sIHNldFNlbGxPcGVuID0gX2JbMV07XG4gICAgdmFyIF9jID0gdXNlU3RhdGUoZmFsc2UpLCB0cmFkZU9wZW4gPSBfY1swXSwgc2V0VHJhZGVPcGVuID0gX2NbMV07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQYXBlciwgeyBlbGV2YXRpb246IDQsIHZhcmlhbnQ6IFwib3V0bGluZWRcIiwgc3g6IHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAzMDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFsYW5jZUxpc3QsIHsgdmFsdWU6IHZhbHVlLCBiYWxhbmNlOiBiYWxhbmNlIH0pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDb250cm9sQnV0dG9ucywgeyBzZXRCdXlPcGVuOiBzZXRCdXlPcGVuLCBzZXRTZWxsT3Blbjogc2V0U2VsbE9wZW4sIHNldFRyYWRlT3Blbjogc2V0VHJhZGVPcGVuIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KERpYWxvZywgeyBvcGVuOiBidXlPcGVuLCBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRCdXlPcGVuKGZhbHNlKTsgfSwgaGlkZUJhY2tkcm9wOiB0cnVlLCBkaXNhYmxlUG9ydGFsOiB0cnVlIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1eURpYWxvZ3VlLCB7IGNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRCdXlPcGVuKGZhbHNlKTsgfSB9KSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGlhbG9nLCB7IG9wZW46IHNlbGxPcGVuLCBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRTZWxsT3BlbihmYWxzZSk7IH0sIGhpZGVCYWNrZHJvcDogdHJ1ZSwgZGlzYWJsZVBvcnRhbDogdHJ1ZSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTZWxsRGlhbG9ndWUsIHsgY2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNlbGxPcGVuKGZhbHNlKTsgfSB9KSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGlhbG9nLCB7IG9wZW46IHRyYWRlT3Blbiwgb25DbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0VHJhZGVPcGVuKGZhbHNlKTsgfSwgaGlkZUJhY2tkcm9wOiB0cnVlLCBkaXNhYmxlUG9ydGFsOiB0cnVlIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYWRlRGlhbG9ndWUsIHsgY2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFRyYWRlT3BlbihmYWxzZSk7IH0gfSkpKSk7XG59O1xudmFyIEFjdGlvbkJ1dHRvbiA9IE11aVN0eWxlZChCdXR0b24pKHtcbiAgICB3aWR0aDogMzAwLFxuICAgIGhlaWdodDogNjAsXG59KTtcbnZhciBCdXR0b25Db250YWluZXIgPSBzdHlsZWQuZGl2KHRlbXBsYXRlT2JqZWN0XzIgfHwgKHRlbXBsYXRlT2JqZWN0XzIgPSBfX21ha2VUZW1wbGF0ZU9iamVjdChbXCJcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBwbGFjZS1pdGVtczogY2VudGVyO1xcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMWZyIDFmcjtcXG4gIGdhcDogMXJlbTtcXG5cIl0sIFtcIlxcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmciAxZnIgMWZyO1xcbiAgZ2FwOiAxcmVtO1xcblwiXSkpKTtcbnZhciBDb250cm9sQnV0dG9ucyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzZXRCdXlPcGVuID0gX2Euc2V0QnV5T3Blbiwgc2V0U2VsbE9wZW4gPSBfYS5zZXRTZWxsT3Blbiwgc2V0VHJhZGVPcGVuID0gX2Euc2V0VHJhZGVPcGVuO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b25Db250YWluZXIsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWN0aW9uQnV0dG9uLCB7IHZhcmlhbnQ6IFwiY29udGFpbmVkXCIsIGVuZEljb246IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsbEljb24sIG51bGwpLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRCdXlPcGVuKHRydWUpOyB9IH0sIFwiQnV5XCIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFjdGlvbkJ1dHRvbiwgeyB2YXJpYW50OiBcImNvbnRhaW5lZFwiLCBlbmRJY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KENhc2hWYWx1ZSwgbnVsbCksIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNlbGxPcGVuKHRydWUpOyB9IH0sIFwiU2VsbFwiKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25CdXR0b24sIHsgdmFyaWFudDogXCJjb250YWluZWRcIiwgZW5kSWNvbjogUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2ZlciwgbnVsbCksIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFRyYWRlT3Blbih0cnVlKTsgfSB9LCBcIlRyYW5zZmVyXCIpKSk7XG59O1xudmFyIHRlbXBsYXRlT2JqZWN0XzEsIHRlbXBsYXRlT2JqZWN0XzI7XG4iLCJpbXBvcnQgeyBMaXN0IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBCYWxhbmNlIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0FjY291bnRCYWxhbmNlV2FsbGV0XCI7XG5pbXBvcnQgQ2FzaFZhbHVlIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0F0dGFjaE1vbmV5XCI7XG5pbXBvcnQgQ3VycmVuY3lCaXRjb2luSWNvbiBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbC9DdXJyZW5jeUJpdGNvaW5cIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEF2YXRhckxpc3RJdGVtIH0gZnJvbSBcIi4vQXZhdGFyTGlzdEl0ZW1cIjtcbmV4cG9ydCB2YXIgQmFsYW5jZUxpc3QgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZSwgYmFsYW5jZSA9IF9hLmJhbGFuY2U7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KExpc3QsIHsgc3g6IHsgd2lkdGg6IFwiMTAwJVwiIH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBdmF0YXJMaXN0SXRlbSwgeyBoZWFkaW5nOiBcIkJhbGFuY2VcIiwgdGV4dDogYmFsYW5jZS50b1N0cmluZygpLCBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhbGFuY2UsIHsgZm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcInByaW1hcnlcIiB9KSB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBdmF0YXJMaXN0SXRlbSwgeyBoZWFkaW5nOiBcIkNhc2ggVmFsdWVcIiwgdGV4dDogXCIkXCIuY29uY2F0KChiYWxhbmNlICogdmFsdWUpLnRvRml4ZWQoMikpLCBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KENhc2hWYWx1ZSwgeyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwicHJpbWFyeVwiIH0pIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEF2YXRhckxpc3RJdGVtLCB7IGhlYWRpbmc6IFwiQ3J5cHRvIFdvcnRoXCIsIHRleHQ6IFwiJFwiLmNvbmNhdCh2YWx1ZSksIGljb246IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3lCaXRjb2luSWNvbiwgeyBmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwicHJpbWFyeVwiIH0pIH0pKSk7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQnV0dG9uLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dUaXRsZSwgRm9ybUdyb3VwLCBJbnB1dEFkb3JubWVudCwgVHlwb2dyYXBoeSwgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlUmVjb2lsVmFsdWUsIHVzZVNldFJlY29pbFN0YXRlIH0gZnJvbSBcInJlY29pbFwiO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICcuLi9hdG9tcy9hcHAtYXRvbXMnO1xuaW1wb3J0IGZldGNoTnVpIGZyb20gXCIuLi91dGlscy9mZXRjaE51aVwiO1xuaW1wb3J0IHsgdXNlU25hY2tiYXIgfSBmcm9tIFwiLi9zbmFja2Jhci91c2VTbmFja2JhclwiO1xuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSAnbGF5b3V0L3VpJztcbmV4cG9ydCB2YXIgQnV5RGlhbG9ndWUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xvc2UgPSBfYS5jbG9zZTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShcIlwiKSwgYW1vdW50ID0gX2JbMF0sIHNldEFtb3VudCA9IF9iWzFdO1xuICAgIHZhciBfYyA9IHVzZVN0YXRlKGZhbHNlKSwgZXJyb3IgPSBfY1swXSwgc2V0RXJyb3IgPSBfY1sxXTtcbiAgICB2YXIgY3VycmVudFJhdGUgPSB1c2VSZWNvaWxWYWx1ZShzdGF0ZS5jdXJyZW50VmFsdWUpO1xuICAgIHZhciBzZXRCYWxhbmNlID0gdXNlU2V0UmVjb2lsU3RhdGUoc3RhdGUuYmFsYW5jZSk7XG4gICAgdmFyIGFkZEFsZXJ0ID0gdXNlU25hY2tiYXIoKS5hZGRBbGVydDtcbiAgICB2YXIgaGFuZGxlQnV5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChhbW91bnQpO1xuICAgICAgICBmZXRjaE51aSgnbnB3ZF9jcnlwdG86dHJ5QnV5Q3J5cHRvJywge1xuICAgICAgICAgICAgYW1vdW50OiBudW1iZXJcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcCkge1xuICAgICAgICAgICAgaWYgKHJlc3Auc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkQWxlcnQoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXNwLmRhdGEucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEVycm9yKGZhbHNlKTtcbiAgICAgICAgICAgIHNldEJhbGFuY2UocmVzcC5kYXRhLm5ld0JhbCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldEFtb3VudChlLnRhcmdldC52YWx1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGlhbG9nVGl0bGUsIG51bGwsIFwiIENvbmZpcm0gUHVyY2hhc2UgXCIpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KERpYWxvZ0NvbnRlbnQsIG51bGwsXG4gICAgICAgICAgICBhbW91bnQgJiZcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFR5cG9ncmFwaHksIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiWW91IHdpbGwgcmVjZWl2ZSBcIixcbiAgICAgICAgICAgICAgICAgICAgKHBhcnNlRmxvYXQoYW1vdW50KSAvIGN1cnJlbnRSYXRlKS50b0ZpeGVkKDIpLFxuICAgICAgICAgICAgICAgICAgICBcIiBiaXRzXCIpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RmllbGQsIHsgdmFsdWU6IGFtb3VudCwgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSwgcGxhY2Vob2xkZXI6IFwiQW1vdW50XCIsIHR5cGU6IFwibnVtYmVyXCIsIGVycm9yOiBlcnJvciwgSW5wdXRQcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBzdGFydEFkb3JubWVudDogUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dEFkb3JubWVudCwgeyBwb3NpdGlvbjogXCJzdGFydFwiLCB2YXJpYW50OiBcInN0YW5kYXJkXCIgfSwgXCIkXCIpXG4gICAgICAgICAgICAgICAgfSB9KSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGlhbG9nQWN0aW9ucywgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHZhcmlhbnQ6IFwidGV4dFwiLCBjb2xvcjogXCJlcnJvclwiLCBvbkNsaWNrOiBjbG9zZSB9LCBcIkNhbmNlbFwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHZhcmlhbnQ6IFwidGV4dFwiLCBjb2xvcjogXCJzdWNjZXNzXCIsIG9uQ2xpY2s6IGhhbmRsZUJ1eSB9LCBcIkNvbmZpcm1cIikpKSk7XG59O1xuZXhwb3J0IHZhciBTZWxsRGlhbG9ndWUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xvc2UgPSBfYS5jbG9zZTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShcIlwiKSwgYW1vdW50ID0gX2JbMF0sIHNldEFtb3VudCA9IF9iWzFdO1xuICAgIHZhciBfYyA9IHVzZVN0YXRlKGZhbHNlKSwgZXJyb3IgPSBfY1swXSwgc2V0RXJyb3IgPSBfY1sxXTtcbiAgICB2YXIgY3VycmVudFJhdGUgPSB1c2VSZWNvaWxWYWx1ZShzdGF0ZS5jdXJyZW50VmFsdWUpO1xuICAgIHZhciBzZXRCYWxhbmNlID0gdXNlU2V0UmVjb2lsU3RhdGUoc3RhdGUuYmFsYW5jZSk7XG4gICAgdmFyIGFkZEFsZXJ0ID0gdXNlU25hY2tiYXIoKS5hZGRBbGVydDtcbiAgICB2YXIgaGFuZGxlU2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQoYW1vdW50KTtcbiAgICAgICAgZmV0Y2hOdWkoJ25wd2RfY3J5cHRvOnRyeVNlbGxDcnlwdG8nLCB7XG4gICAgICAgICAgICBhbW91bnQ6IG51bWJlclxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAocmVzcC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRBbGVydCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3AuZGF0YS5yZWFzb24sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuICAgICAgICAgICAgc2V0QmFsYW5jZShyZXNwLmRhdGEubmV3QmFsKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0QW1vdW50KGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2dUaXRsZSwgbnVsbCwgXCIgQ29uZmlybSBTZWxsIFwiKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2dDb250ZW50LCBudWxsLFxuICAgICAgICAgICAgYW1vdW50ICYmXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUeXBvZ3JhcGh5LCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIllvdSB3aWxsIHJlY2VpdmUgJFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGFtb3VudCkgKiBjdXJyZW50UmF0ZSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHRGaWVsZCwgeyB2YWx1ZTogYW1vdW50LCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBwbGFjZWhvbGRlcjogXCJBbW91bnRcIiwgdHlwZTogXCJudW1iZXJcIiwgZXJyb3I6IGVycm9yIH0pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2dBY3Rpb25zLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdmFyaWFudDogXCJ0ZXh0XCIsIGNvbG9yOiBcImVycm9yXCIsIG9uQ2xpY2s6IGNsb3NlIH0sIFwiQ2FuY2VsXCIpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdmFyaWFudDogXCJ0ZXh0XCIsIGNvbG9yOiBcInN1Y2Nlc3NcIiwgb25DbGljazogaGFuZGxlU2VsbCB9LCBcIkNvbmZpcm1cIikpKSk7XG59O1xuZXhwb3J0IHZhciBUcmFkZURpYWxvZ3VlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsb3NlID0gX2EuY2xvc2U7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUoXCJcIiksIGFtb3VudCA9IF9iWzBdLCBzZXRBbW91bnQgPSBfYlsxXTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZShcIlwiKSwgc291cmNlID0gX2NbMF0sIHNldFNvdXJjZSA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHVzZVN0YXRlKGZhbHNlKSwgZXJyb3IgPSBfZFswXSwgc2V0RXJyb3IgPSBfZFsxXTtcbiAgICB2YXIgY3VycmVudFJhdGUgPSB1c2VSZWNvaWxWYWx1ZShzdGF0ZS5jdXJyZW50VmFsdWUpO1xuICAgIHZhciBzZXRCYWxhbmNlID0gdXNlU2V0UmVjb2lsU3RhdGUoc3RhdGUuYmFsYW5jZSk7XG4gICAgdmFyIGFkZEFsZXJ0ID0gdXNlU25hY2tiYXIoKS5hZGRBbGVydDtcbiAgICB2YXIgaGFuZGxlVHJhZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGFtb3VudCk7XG4gICAgICAgIHZhciBpZCA9IHBhcnNlSW50KHNvdXJjZSk7XG4gICAgICAgIGZldGNoTnVpKCducHdkX2NyeXB0bzp0cnlUcmFkZUNyeXB0bycsIHtcbiAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBpZFxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICAgICBpZiAocmVzcC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRBbGVydCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3AuZGF0YS5yZWFzb24sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0RXJyb3IoZmFsc2UpO1xuICAgICAgICAgICAgc2V0QmFsYW5jZShyZXNwLmRhdGEubmV3QmFsKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlQW1vdW50Q2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0QW1vdW50KGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVTb3VyY2VDaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRTb3VyY2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KERpYWxvZ1RpdGxlLCBudWxsLCBcIiBDb25maXJtIFRyYWRlIFwiKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2dDb250ZW50LCBudWxsLFxuICAgICAgICAgICAgYW1vdW50ICYmXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUeXBvZ3JhcGh5LCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIllvdSB3aWxsIHJlY2VpdmUgJFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGFtb3VudCkgKiBjdXJyZW50UmF0ZSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHRGaWVsZCwgeyB2YWx1ZTogYW1vdW50LCBvbkNoYW5nZTogaGFuZGxlQW1vdW50Q2hhbmdlLCBwbGFjZWhvbGRlcjogXCJBbW91bnRcIiwgdHlwZTogXCJudW1iZXJcIiwgZXJyb3I6IGVycm9yIH0pLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEZpZWxkLCB7IHZhbHVlOiBzb3VyY2UsIG9uQ2hhbmdlOiBoYW5kbGVTb3VyY2VDaGFuZ2UsIHBsYWNlaG9sZGVyOiBcIlBsYXllciBJRFwiLCB0eXBlOiBcIm51bWJlclwiLCBlcnJvcjogZXJyb3IgfSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEaWFsb2dBY3Rpb25zLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdmFyaWFudDogXCJ0ZXh0XCIsIGNvbG9yOiBcImVycm9yXCIsIG9uQ2xpY2s6IGNsb3NlIH0sIFwiQ2FuY2VsXCIpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdmFyaWFudDogXCJ0ZXh0XCIsIGNvbG9yOiBcInN1Y2Nlc3NcIiwgb25DbGljazogaGFuZGxlVHJhZGUgfSwgXCJDb25maXJtXCIpKSkpO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2FzaFZhbHVlIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQXR0YWNoTW9uZXknO1xuaW1wb3J0IFNlbGxJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvU2VsbCc7XG5pbXBvcnQgVHJhbnNmZXIgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9TdWJkaXJlY3RvcnlBcnJvd1JpZ2h0JztcbmltcG9ydCB7IERpdmlkZXIsIExpc3QsIFBhcGVyIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IEF2YXRhckxpc3RJdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQXZhdGFyTGlzdEl0ZW1cIjtcbmltcG9ydCB7IHVzZVJlY29pbFN0YXRlIH0gZnJvbSBcInJlY29pbFwiO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICcuLi9hdG9tcy9hcHAtYXRvbXMnO1xuaW1wb3J0IGZldGNoTnVpIGZyb20gXCIuLi91dGlscy9mZXRjaE51aVwiO1xudmFyIGljb25zID0ge1xuICAgIGJvdWdodDogUmVhY3QuY3JlYXRlRWxlbWVudChTZWxsSWNvbiwgeyBjb2xvcjogXCJlcnJvclwiIH0pLFxuICAgIHNvbGQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FzaFZhbHVlLCB7IGNvbG9yOiBcInN1Y2Nlc3NcIiB9KSxcbiAgICB0cmFuc2ZlcnJlZDogUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2ZlciwgeyBjb2xvcjogXCJpbmZvXCIgfSlcbn07XG52YXIgaGVhZGluZ3MgPSB7XG4gICAgYm91Z2h0OiBcIlB1cmNoYXNlXCIsXG4gICAgc29sZDogXCJTb2xkXCIsXG4gICAgdHJhbnNmZXJyZWQ6IFwiVHJhbnNmZXJcIlxufTtcbnZhciBnZXRMaXN0SXRlbVRleHQgPSBmdW5jdGlvbiAodHlwZSwgYW1vdW50LCB2YWx1ZSwgaXNSZWNlaXZpbmcpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImJvdWdodFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiQm91Z2h0IFwiLmNvbmNhdChhbW91bnQsIFwiIGZvciAkXCIpLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgIGNhc2UgXCJzb2xkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJTb2xkIFwiLmNvbmNhdChhbW91bnQsIFwiIGZvciAkXCIpLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgIGNhc2UgXCJ0cmFuc2ZlcnJlZFwiOlxuICAgICAgICAgICAgcmV0dXJuIGlzUmVjZWl2aW5nID9cbiAgICAgICAgICAgICAgICBcIlJlY2VpdmVkIFwiLmNvbmNhdChhbW91bnQsIFwiIHdvcnRoIFwiKS5jb25jYXQodmFsdWUpIDpcbiAgICAgICAgICAgICAgICBcIlNlbnQgXCIuY29uY2F0KGFtb3VudCwgXCIgd29ydGggXCIpLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gXCJTb21ldGhpbmcncyB3cm9uZyBoZXJlIEkgY2FuIGZlZWwgaXQuXCI7XG4gICAgfVxufTtcbmV4cG9ydCB2YXIgVHJhbnNhY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSA9IHVzZVJlY29pbFN0YXRlKHN0YXRlLnRyYW5zYWN0aW9ucyksIGRhdGEgPSBfYVswXSwgc2V0RGF0YSA9IF9hWzFdO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZldGNoTnVpKCducHdkX2NyeXB0bzpmZXRjaFRyYW5zYWN0aW9ucycpLnRoZW4oZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgICAgIHNldERhdGEocmVzcCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFwZXIsIHsgc3g6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCJcbiAgICAgICAgfSwgdmFyaWFudDogXCJvdXRsaW5lZFwiLCBzcXVhcmU6IHRydWUgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0LCB7IGRlbnNlOiB0cnVlLCBzeDoge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICBvdmVyZmxvd1k6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93WDogXCJoaWRkZW5cIlxuICAgICAgICAgICAgfSB9LCBkYXRhLm1hcChmdW5jdGlvbiAoX2EsIGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IF9hLnR5cGUsIGFtb3VudCA9IF9hLmFtb3VudCwgdmFsdWUgPSBfYS52YWx1ZSwgaXNSZWNlaXZpbmcgPSBfYS5pc1JlY2VpdmluZztcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEF2YXRhckxpc3RJdGVtLCB7IGhlYWRpbmc6IGhlYWRpbmdzW3R5cGVdLCB0ZXh0OiBnZXRMaXN0SXRlbVRleHQodHlwZSwgYW1vdW50LCB2YWx1ZSwgaXNSZWNlaXZpbmcpLCBpY29uOiBpY29uc1t0eXBlXSwga2V5OiBpbmRleCB9KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KERpdmlkZXIsIG51bGwpKSk7XG4gICAgICAgIH0pKSkpO1xufTtcbiJdLCJuYW1lcyI6WyJBUFBfUFJJTUFSWV9DT0xPUiIsIm9yYW5nZSIsIkxJR0hUX0FQUF9URVhUX0NPTE9SIiwiY29tbW9uIiwidGhlbWVzIiwibGlnaHQiLCJwYWxldHRlIiwibW9kZSIsInByaW1hcnkiLCJtYWluIiwiZGFyayIsImNvbnRyYXN0VGV4dCIsInNlY29uZGFyeSIsIl9hIiwiY2hpbGRyZW4iLCJ0aGVtZU9wdGlvbnMiLCJ0aGVtZSIsImNyZWF0ZVRoZW1lIiwiVGhlbWVQcm92aWRlciIsInN0YXRlIiwiY3VycmVudFZhbHVlIiwiYXRvbSIsImtleSIsImRlZmF1bHQiLCJiYWxhbmNlIiwiaGlzdG9yeSIsInRyYW5zYWN0aW9ucyIsIkF2YXRhckxpc3RJdGVtIiwiaGVhZGluZyIsInRleHQiLCJpY29uIiwiY29va2VkIiwicmF3IiwiQ29udGFpbmVyIiwidGVtcGxhdGVPYmplY3RfMSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ2YXJpYW50IiwiY29sb3IiLCJwYXRobmFtZSIsInVzZUxvY2F0aW9uIiwidXNlU3RhdGUiLCJwYWdlIiwic2V0UGFnZSIsIm9uQ2hhbmdlIiwiX2UiLCJuZXdQYWdlIiwic2hvd0xhYmVscyIsInN4Iiwid2lkdGgiLCJsYWJlbCIsImNvbXBvbmVudCIsIk5hdkxpbmsiLCJ0byIsIl9fYXNzaWduIiwiYXNzaWduIiwidCIsInMiLCJpIiwibiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsInRoaXMiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJ6SW5kZXgiLCJlbGV2YXRpb24iLCJUeXBvZ3JhcGh5IiwibWF4V2lkdGgiLCJ3b3JkV3JhcCIsImZvbnRTaXplIiwiUGhvbmVTbmFja2JhciIsIl9iIiwidXNlU25hY2tiYXIiLCJhbGVydCIsImlzT3BlbiIsImhhbmRsZUNsb3NlIiwiU25hY2tiYXIiLCJhdXRvSGlkZUR1cmF0aW9uIiwiZHVyYXRpb24iLCJvcGVuIiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImhlaWdodCIsInBvc2l0aW9uIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib25DbG9zZSIsInNldmVyaXR5IiwidHlwZSIsIm1lc3NhZ2UiLCJTbmFja2JhckNvbnRleHQiLCJjcmVhdGVDb250ZXh0Iiwic2V0T3BlbiIsIl9jIiwic2V0QWxlcnQiLCJQcm92aWRlciIsImFkZEFsZXJ0IiwidXNlQ29udGV4dCIsIlMiLCJldmVudE5hbWUiLCJkYXRhIiwibW9ja1Jlc3AiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsIm9wdGlvbnMiLCJib2R5IiwiZiIsInkiLCJnIiwiXyIsInNlbnQiLCJ0cnlzIiwib3BzIiwibmV4dCIsInZlcmIiLCJTeW1ib2wiLCJpdGVyYXRvciIsInYiLCJvcCIsIlR5cGVFcnJvciIsImRvbmUiLCJwb3AiLCJwdXNoIiwiZSIsInN0ZXAiLCJfX2dlbmVyYXRvciIsIm1ldGhvZCIsImhlYWRlcnMiLCJKU09OIiwic3RyaW5naWZ5IiwiZmV0Y2giLCJjb25jYXQiLCJqc29uIiwiUCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiQ2hhcnQiLCJDYXRlZ29yeVNjYWxlIiwiTGluZWFyU2NhbGUiLCJQb2ludEVsZW1lbnQiLCJMaW5lRWxlbWVudCIsIlRpdGxlIiwiVG9vbHRpcCIsIkxlZ2VuZCIsIkhpc3RvcnkiLCJtaW4iLCJtYXgiLCJwcmljZUhpc3RvcnkiLCJ1c2VSZWNvaWxWYWx1ZSIsIkxFTkdUSCIsImxhYmVscyIsIkFycmF5IiwiZmlsbCIsImlzRGFya21vZGUiLCJkYXRhc2V0cyIsImJvcmRlckNvbG9yIiwidGVuc2lvbiIsInRvRml4ZWQiLCJ1cCIsInBlcmNlbnQiLCJMaW5lIiwicmVzcG9uc2l2ZSIsIm1haW50YWluQXNwZWN0UmF0aW8iLCJwbHVnaW5zIiwibGVnZW5kIiwidG9vbHRpcCIsImNhbGxiYWNrcyIsImN0eCIsInNjYWxlcyIsInRpY2tzIiwiY2FsbGJhY2siLCJncmlkIiwieCIsImZvbnRXZWlnaHQiLCJ0ZW1wbGF0ZU9iamVjdF8yIiwiQmFsYW5jZUxpc3QiLCJMaXN0IiwidG9TdHJpbmciLCJDdXJyZW5jeUJpdGNvaW4iLCJCdXlEaWFsb2d1ZSIsImNsb3NlIiwiYW1vdW50Iiwic2V0QW1vdW50IiwiZXJyb3IiLCJzZXRFcnJvciIsImN1cnJlbnRSYXRlIiwic2V0QmFsYW5jZSIsInVzZVNldFJlY29pbFN0YXRlIiwiRGlhbG9nVGl0bGUiLCJEaWFsb2dDb250ZW50IiwicGFyc2VGbG9hdCIsIlRleHRGaWVsZCIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwiSW5wdXRQcm9wcyIsInN0YXJ0QWRvcm5tZW50IiwiSW5wdXRBZG9ybm1lbnQiLCJEaWFsb2dBY3Rpb25zIiwiQnV0dG9uIiwib25DbGljayIsIm51bWJlciIsImZldGNoTnVpIiwicmVzcCIsInN0YXR1cyIsInJlYXNvbiIsIm5ld0JhbCIsIlNlbGxEaWFsb2d1ZSIsIlRyYWRlRGlhbG9ndWUiLCJzb3VyY2UiLCJzZXRTb3VyY2UiLCJfZCIsIkZvcm1Hcm91cCIsImlkIiwicGFyc2VJbnQiLCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsIlBvcnRmb2xpbyIsImJ1eU9wZW4iLCJzZXRCdXlPcGVuIiwic2VsbE9wZW4iLCJzZXRTZWxsT3BlbiIsInRyYWRlT3BlbiIsInNldFRyYWRlT3BlbiIsIlBhcGVyIiwiQ29udHJvbEJ1dHRvbnMiLCJEaWFsb2ciLCJoaWRlQmFja2Ryb3AiLCJkaXNhYmxlUG9ydGFsIiwiQWN0aW9uQnV0dG9uIiwiQnV0dG9uQ29udGFpbmVyIiwiZW5kSWNvbiIsIlNlbGwiLCJpY29ucyIsImJvdWdodCIsInNvbGQiLCJ0cmFuc2ZlcnJlZCIsImhlYWRpbmdzIiwiZ2V0TGlzdEl0ZW1UZXh0IiwiaXNSZWNlaXZpbmciLCJUcmFuc2FjdGlvbnMiLCJ1c2VSZWNvaWxTdGF0ZSIsInNldERhdGEiLCJ1c2VFZmZlY3QiLCJmbGV4RGlyZWN0aW9uIiwic3F1YXJlIiwiZGVuc2UiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJtYXAiLCJpbmRleCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/803.js b/server-data/resources/[phone]/npwd_crypto/web/dist/803.js deleted file mode 100644 index db2ff4df5..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/803.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[803],{7326:(e,t,n)=>{function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},9611:(e,t,n)=>{function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}n.d(t,{Z:()=>r})}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODAzLmpzIiwibWFwcGluZ3MiOiJ5R0FBZSxTQUFTQSxFQUF1QkMsR0FDN0MsUUFBYSxJQUFUQSxFQUNGLE1BQU0sSUFBSUMsZUFBZSw2REFHM0IsT0FBT0QsRSxpQ0NMTSxTQUFTRSxFQUFnQkMsRUFBR0MsR0FLekMsT0FKQUYsRUFBa0JHLE9BQU9DLGVBQWlCRCxPQUFPQyxlQUFlQyxPQUFTLFNBQXlCSixFQUFHQyxHQUVuRyxPQURBRCxFQUFFSyxVQUFZSixFQUNQRCxHQUVGRCxFQUFnQkMsRUFBR0MsRyIsInNvdXJjZXMiOlsid2VicGFjazovL25wd2RfY3J5cHRvLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9ucHdkX2NyeXB0by8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iXSwibmFtZXMiOlsiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwiT2JqZWN0Iiwic2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/804.js b/server-data/resources/[phone]/npwd_crypto/web/dist/804.js deleted file mode 100644 index d87e7045d..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/804.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[804],{2804:(e,t,n)=>{n.r(t),n.d(t,{default:()=>hi,DefaultValue:()=>Ls,RecoilLoadable:()=>Us,RecoilRoot:()=>Cs,atom:()=>Ds,atomFamily:()=>Ps,constSelector:()=>Fs,errorSelector:()=>zs,isRecoilValue:()=>Ms,noWait:()=>Gs,readOnlySelector:()=>Ws,retentionZone:()=>fi,selector:()=>Os,selectorFamily:()=>xs,snapshot_UNSTABLE:()=>ui,useGetRecoilValueInfo_UNSTABLE:()=>ei,useGotoRecoilSnapshot:()=>ii,useRecoilBridgeAcrossReactRoots_UNSTABLE:()=>Is,useRecoilCallback:()=>ai,useRecoilRefresher_UNSTABLE:()=>ti,useRecoilSnapshot:()=>li,useRecoilState:()=>Ys,useRecoilStateLoadable:()=>Js,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:()=>ri,useRecoilStoreID:()=>Bs,useRecoilTransactionObserver_UNSTABLE:()=>ci,useRecoilTransaction_UNSTABLE:()=>si,useRecoilValue:()=>Ks,useRecoilValueLoadable:()=>Zs,useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:()=>ni,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:()=>oi,useResetRecoilState:()=>Qs,useRetain:()=>di,useSetRecoilState:()=>Xs,waitForAll:()=>Hs,waitForAllSettled:()=>qs,waitForAny:()=>$s,waitForNone:()=>js});var o=n(2950),r=n.n(o),a=n(2181),s=n.n(a),i=function(e){const t=new Error(e);if(void 0===t.stack)try{throw t}catch(e){}return t},l=function(e){return!!e&&"function"==typeof e.then},c=function(e,t){if(null!=e)return e;throw i(null!=t?t:"Got unexpected null or undefined")};function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class d{getValue(){throw i("BaseLoadable")}toPromise(){throw i("BaseLoadable")}valueMaybe(){throw i("BaseLoadable")}valueOrThrow(){throw i(`Loadable expected value, but in "${this.state}" state`)}promiseMaybe(){throw i("BaseLoadable")}promiseOrThrow(){throw i(`Loadable expected promise, but in "${this.state}" state`)}errorMaybe(){throw i("BaseLoadable")}errorOrThrow(){throw i(`Loadable expected error, but in "${this.state}" state`)}is(e){return e.state===this.state&&e.contents===this.contents}map(e){throw i("BaseLoadable")}}class f extends d{constructor(e){super(),u(this,"state","hasValue"),u(this,"contents",void 0),this.contents=e}getValue(){return this.contents}toPromise(){return Promise.resolve(this.contents)}valueMaybe(){return this.contents}valueOrThrow(){return this.contents}promiseMaybe(){}errorMaybe(){}map(e){try{const t=e(this.contents);return l(t)?_(t):m(t)?t:y(t)}catch(t){return l(t)?_(t.next((()=>this.map(e)))):v(t)}}}class h extends d{constructor(e){super(),u(this,"state","hasError"),u(this,"contents",void 0),this.contents=e}getValue(){throw this.contents}toPromise(){return Promise.reject(this.contents)}valueMaybe(){}promiseMaybe(){}errorMaybe(){return this.contents}errorOrThrow(){return this.contents}map(e){return this}}class p extends d{constructor(e){super(),u(this,"state","loading"),u(this,"contents",void 0),this.contents=e}getValue(){throw this.contents}toPromise(){return this.contents}valueMaybe(){}promiseMaybe(){return this.contents}promiseOrThrow(){return this.contents}errorMaybe(){}map(e){return _(this.contents.then((t=>{const n=e(t);if(m(n)){const e=n;switch(e.state){case"hasValue":case"loading":return e.contents;case"hasError":throw e.contents}}return n})).catch((t=>{if(l(t))return t.then((()=>this.map(e).contents));throw t})))}}function y(e){return Object.freeze(new f(e))}function v(e){return Object.freeze(new h(e))}function _(e){return Object.freeze(new p(e))}function S(e){const t=function(e){return e.every((e=>"hasValue"===e.state))?y(e.map((e=>e.contents))):e.some((e=>"hasError"===e.state))?v(c(e.find((e=>"hasError"===e.state)),"Invalid loadable passed to loadableAll").contents):_(Promise.all(e.map((e=>e.contents))))}((Array.isArray(e)?e:Object.getOwnPropertyNames(e).map((t=>e[t]))).map((e=>m(e)?e:l(e)?_(e):y(e))));return Array.isArray(e)?t:t.map((t=>Object.getOwnPropertyNames(e).reduce(((e,n,o)=>({...e,[n]:t[o]})),{})))}function m(e){return e instanceof d}const g={of:e=>l(e)?_(e):m(e)?e:y(e),error:e=>v(e),all:S,isLoadable:m};var R={loadableWithValue:y,loadableWithError:v,loadableWithPromise:_,loadableLoading:function(){return Object.freeze(new p(new Promise((()=>{}))))},loadableAll:S,isLoadable:m,RecoilLoadable:g},T=R.loadableWithValue,b=R.loadableWithError,w=R.loadableWithPromise,A=R.loadableLoading,N=R.loadableAll,E=R.isLoadable,k=R.RecoilLoadable,V=Object.freeze({__proto__:null,loadableWithValue:T,loadableWithError:b,loadableWithPromise:w,loadableLoading:A,loadableAll:N,isLoadable:E,RecoilLoadable:k});class L{constructor(e){u(this,"key",void 0),this.key=e}}class M extends L{}class U extends L{}var C={AbstractRecoilValue:L,RecoilState:M,RecoilValueReadOnly:U,isRecoilValue:function(e){return e instanceof M||e instanceof U}},B=C.AbstractRecoilValue,I=C.RecoilState,D=C.RecoilValueReadOnly,O=C.isRecoilValue,P=Object.freeze({__proto__:null,AbstractRecoilValue:B,RecoilState:I,RecoilValueReadOnly:D,isRecoilValue:O});const x=(new Map).set("recoil_hamt_2020",!0).set("recoil_sync_external_store",!0).set("recoil_suppress_rerender_in_callback",!0).set("recoil_memory_managament_2020",!0);function F(e){var t;return null!==(t=x.get(e))&&void 0!==t&&t}F.setPass=e=>{x.set(e,!0)},F.setFail=e=>{x.set(e,!1)},F.clear=()=>{x.clear()};var z=F,W=function(e,t){return function*(){let n=0;for(const o of e)yield t(o,n++)}()};class G{}const j=new G;class $ extends Error{constructor(e){super(`Tried to set the value of Recoil selector ${e} using an updater function, but it is an async selector in a pending or error state; this is not supported.`)}}const H=new Map,q=new Map;class K extends Error{}const Z=new Map;function Y(e){return Z.get(e)}var J,X,Q={nodes:H,recoilValues:q,registerNode:function(e){if(H.has(e.key)){const t=`Duplicate atom key "${e.key}". This is a FATAL ERROR in\n production. But it is safe to ignore this warning if it occurred because of\n hot module replacement.`;console.warn(t)}H.set(e.key,e);const t=null==e.set?new P.RecoilValueReadOnly(e.key):new P.RecoilState(e.key);return q.set(e.key,t),t},getNode:function(e){const t=H.get(e);if(null==t)throw new K(`Missing definition for RecoilValue: "${e}""`);return t},getNodeMaybe:function(e){return H.get(e)},deleteNodeConfigIfPossible:function(e){var t;if(!z("recoil_memory_managament_2020"))return;const n=H.get(e);var o;null!=n&&null!==(t=n.shouldDeleteConfigOnRelease)&&void 0!==t&&t.call(n)&&(H.delete(e),null===(o=Y(e))||void 0===o||o(),Z.delete(e))},setConfigDeletionHandler:function(e,t){z("recoil_memory_managament_2020")&&(void 0===t?Z.delete(e):Z.set(e,t))},getConfigDeletionHandler:Y,recoilValuesForKeys:function(e){return W(e,(e=>c(q.get(e))))},NodeMissingError:K,DefaultValue:G,DEFAULT_VALUE:j,RecoilValueNotReady:$},ee=function(e,t){t()},te=(J=function(e){var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n={},o=Math.pow(2,5),r=o-1,a=o/2,s=o/4,i={},l=function(e){return function(){return e}},c=n.hash=function(e){var n=void 0===e?"undefined":t(e);if("number"===n)return e;"string"!==n&&(e+="");for(var o=0,r=0,a=e.length;r>>e&r},d=function(e){return 1<>1&1431655765))+(n>>2&858993459))+(n>>4)&252645135,127&(n+=n>>8)+(n>>16);var n},h=function(e,t,n,o){var r=o;if(!e){var a=o.length;r=new Array(a);for(var s=0;s1?S(e,this.hash,l):l[0]}var c=o();return c===i?this:(++s.value,R(e,n,this.hash,this,r,_(e,r,a,c)))},A=function(e,t,n,o,r,s,i){var l=this.mask,c=this.children,_=u(n,r),S=d(_),R=f(l,S),b=l&S,w=b?c[R]:y,A=w._modify(e,t,n+5,o,r,s,i);if(w===A)return this;var N,E=T(e,this),k=l,V=void 0;if(b&&v(A)){if(!(k&=~S))return y;if(c.length<=2&&((N=c[1^R])===y||1===N.type||2===N.type))return c[1^R];V=p(E,R,c)}else if(b||v(A))V=h(E,R,A,c);else{if(c.length>=a)return function(e,t,n,o,r){for(var a=[],s=o,i=0,l=0;s;++l)1&s&&(a[l]=r[i++]),s>>>=1;return a[t]=n,g(e,i+1,a)}(e,_,A,l,c);k|=S,V=function(e,t,n,o){var r=o.length;if(e){for(var a=r;a>=t;)o[a--]=o[a];return o[t]=n,o}for(var s=0,i=0,l=new Array(r+1);s{n.set(o,t(e,o))})),n};function ce(e,t,n){const{nodeDeps:o,nodeToNodeSubscriptions:r}=t;e.forEach(((e,t)=>{const a=o.get(t);a&&n&&a!==n.nodeDeps.get(t)||(o.set(t,new Set(e)),(null==a?e:ie(e,a)).forEach((e=>{r.has(e)||r.set(e,new Set),c(r.get(e)).add(t)})),a&&ie(a,e).forEach((e=>{if(!r.has(e))return;const n=c(r.get(e));n.delete(t),0===n.size&&r.delete(e)})))}))}var ue={addToDependencyMap:function(e,t,n){n.has(e)||n.set(e,new Set),c(n.get(e)).add(t)},cloneGraph:function(e){return{nodeDeps:le(e.nodeDeps,(e=>new Set(e))),nodeToNodeSubscriptions:le(e.nodeToNodeSubscriptions,(e=>new Set(e)))}},graph:function(){return{nodeDeps:new Map,nodeToNodeSubscriptions:new Map}},mergeDepsIntoDependencyMap:function(e,t){e.forEach(((e,n)=>{t.has(n)||t.set(n,new Set);const o=c(t.get(n));e.forEach((e=>o.add(e)))}))},saveDependencyMapToStore:function(e,t,n){var o,r,a,s;const i=t.getState();n!==i.currentTree.version&&n!==(null===(o=i.nextTree)||void 0===o?void 0:o.version)&&(null===(r=i.previousTree)||void 0===r||r.version);const l=t.getGraph(n);if(ce(e,l),n===(null===(a=i.previousTree)||void 0===a?void 0:a.version)&&ce(e,t.getGraph(i.currentTree.version),l),n===(null===(s=i.previousTree)||void 0===s?void 0:s.version)||n===i.currentTree.version){var c;const n=null===(c=i.nextTree)||void 0===c?void 0:c.version;void 0!==n&&ce(e,t.getGraph(n),l)}}};let de=0,fe=0,he=0;var pe={getNextTreeStateVersion:()=>de++,getNextStoreID:()=>fe++,getNextComponentID:()=>he++};const{persistentMap:ye}=se,{graph:ve}=ue,{getNextTreeStateVersion:_e}=pe;function Se(){const e=_e();return{version:e,stateID:e,transactionMetadata:{},dirtyAtoms:new Set,atomValues:ye(),nonvalidatedAtoms:ye()}}var me={makeEmptyTreeState:Se,makeEmptyStoreState:function(){const e=Se();return{currentTree:e,nextTree:null,previousTree:null,commitDepth:0,knownAtoms:new Set,knownSelectors:new Set,transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:(new Map).set(e.version,ve()),retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map}},getNextTreeStateVersion:_e};class ge{}var Re={RetentionZone:ge,retentionZone:function(){return new ge}},Te={setByAddingToSet:function(e,t){const n=new Set(e);return n.add(t),n},setByDeletingFromSet:function(e,t){const n=new Set(e);return n.delete(t),n},mapBySettingInMap:function(e,t,n){const o=new Map(e);return o.set(t,n),o},mapByUpdatingInMap:function(e,t,n){const o=new Map(e);return o.set(t,n(o.get(t))),o},mapByDeletingFromMap:function(e,t){const n=new Map(e);return n.delete(t),n},mapByDeletingMultipleFromMap:function(e,t){const n=new Map(e);return t.forEach((e=>n.delete(e))),n}},be=function*(e,t){let n=0;for(const o of e)t(o,n++)&&(yield o)},we=function(e,t){return new Proxy(e,{get:(e,n)=>(!(n in e)&&n in t&&(e[n]=t[n]()),e[n]),ownKeys:e=>Object.keys(e)})};const{getNode:Ae,getNodeMaybe:Ne,recoilValuesForKeys:Ee}=Q,{RetentionZone:ke}=Re,{setByAddingToSet:Ve}=Te,Le=Object.freeze(new Set);class Me extends Error{}function Ue(e,t,n,o){const r=e.getState();if(r.nodeCleanupFunctions.has(n))return;const a=Ae(n),s=function(e,t,n){if(!z("recoil_memory_managament_2020"))return()=>{};const{nodesRetainedByZone:o}=e.getState().retention;function r(e){let n=o.get(e);n||o.set(e,n=new Set),n.add(t)}if(n instanceof ke)r(n);else if(Array.isArray(n))for(const e of n)r(e);return()=>{if(!z("recoil_memory_managament_2020"))return;const{retention:o}=e.getState();function r(e){const n=o.nodesRetainedByZone.get(e);null==n||n.delete(t),n&&0===n.size&&o.nodesRetainedByZone.delete(e)}if(n instanceof ke)r(n);else if(Array.isArray(n))for(const e of n)r(e)}}(e,n,a.retainedBy),i=a.init(e,t,o);r.nodeCleanupFunctions.set(n,(()=>{i(),s()}))}function Ce(e,t,n){return Ae(n).peek(e,t)}function Be(e,t,n){const o=new Set,r=Array.from(n),a=e.getGraph(t.version);for(let e=r.pop();e;e=r.pop()){var s;o.add(e);const t=null!==(s=a.nodeToNodeSubscriptions.get(e))&&void 0!==s?s:Le;for(const e of t)o.has(e)||r.push(e)}return o}var Ie,De,Oe,Pe={getNodeLoadable:function(e,t,n){return Ue(e,t,n,"get"),Ae(n).get(e,t)},peekNodeLoadable:Ce,setNodeValue:function(e,t,n,o){const r=Ae(n);if(null==r.set)throw new Me(`Attempt to set read-only RecoilValue: ${n}`);const a=r.set;return Ue(e,t,n,"set"),a(e,t,o)},initializeNode:function(e,t,n){Ue(e,e.getState().currentTree,t,n)},cleanUpNode:function(e,t){var n;const o=e.getState();null===(n=o.nodeCleanupFunctions.get(t))||void 0===n||n(),o.nodeCleanupFunctions.delete(t)},setUnvalidatedAtomValue_DEPRECATED:function(e,t,n){var o;const r=Ne(t);return null==r||null===(o=r.invalidate)||void 0===o||o.call(r,e),{...e,atomValues:e.atomValues.clone().delete(t),nonvalidatedAtoms:e.nonvalidatedAtoms.clone().set(t,n),dirtyAtoms:Ve(e.dirtyAtoms,t)}},peekNodeInfo:function(e,t,n){const o=e.getState(),r=e.getGraph(t.version),a=Ae(n).nodeType;return we({type:a},{loadable:()=>Ce(e,t,n),isActive:()=>o.knownAtoms.has(n)||o.knownSelectors.has(n),isSet:()=>"selector"!==a&&t.atomValues.has(n),isModified:()=>t.dirtyAtoms.has(n),deps:()=>{var e;return Ee(null!==(e=r.nodeDeps.get(n))&&void 0!==e?e:[])},subscribers:()=>{var r,a;return{nodes:Ee(be(Be(e,t,new Set([n])),(e=>e!==n))),components:W(null!==(r=null===(a=o.nodeToComponentSubscriptions.get(n))||void 0===a?void 0:a.values())&&void 0!==r?r:[],(([e])=>({name:e})))}}})},getDownstreamNodes:Be};const xe=null!==(Ie=r().createMutableSource)&&void 0!==Ie?Ie:r().unstable_createMutableSource,Fe=null!==(De=r().useMutableSource)&&void 0!==De?De:r().unstable_useMutableSource,ze=null!==(Oe=r().useSyncExternalStore)&&void 0!==Oe?Oe:r().unstable_useSyncExternalStore;var We={createMutableSource:xe,useMutableSource:Fe,useSyncExternalStore:ze,reactMode:function(){return z("recoil_transition_support")?{mode:"TRANSITION_SUPPORT",early:!0,concurrent:!0}:z("recoil_sync_external_store")&&null!=ze?{mode:"SYNC_EXTERNAL_STORE",early:!0,concurrent:!1}:z("recoil_mutable_source")&&null!=Fe&&"undefined"!=typeof window&&!window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE?z("recoil_suppress_rerender_in_callback")?{mode:"MUTABLE_SOURCE",early:!0,concurrent:!0}:{mode:"MUTABLE_SOURCE",early:!1,concurrent:!1}:z("recoil_suppress_rerender_in_callback")?{mode:"LEGACY",early:!0,concurrent:!1}:{mode:"LEGACY",early:!1,concurrent:!1}}};const{getDownstreamNodes:Ge,getNodeLoadable:je,setNodeValue:$e}=Pe,{getNextComponentID:He}=pe,{getNode:qe,getNodeMaybe:Ke}=Q,{DefaultValue:Ze,RecoilValueNotReady:Ye}=Q,{reactMode:Je}=We,{AbstractRecoilValue:Xe,RecoilState:Qe,RecoilValueReadOnly:et,isRecoilValue:tt}=P;function nt(e,t,n){if("set"===n.type){const{recoilValue:o,valueOrUpdater:r}=n,a=function(e,t,{key:n},o){if("function"==typeof o){const r=je(e,t,n);if("loading"===r.state)throw new Ye(n);if("hasError"===r.state)throw r.contents;return o(r.contents)}return o}(e,t,o,r),s=$e(e,t,o.key,a);for(const[e,n]of s.entries())ot(t,e,n)}else if("setLoadable"===n.type){const{recoilValue:{key:e},loadable:o}=n;ot(t,e,o)}else if("markModified"===n.type){const{recoilValue:{key:e}}=n;t.dirtyAtoms.add(e)}else if("setUnvalidated"===n.type){var o;const{recoilValue:{key:e},unvalidatedValue:r}=n,a=Ke(e);null==a||null===(o=a.invalidate)||void 0===o||o.call(a,t),t.atomValues.delete(e),t.nonvalidatedAtoms.set(e,r),t.dirtyAtoms.add(e)}else n.type}function ot(e,t,n){"hasValue"===n.state&&n.contents instanceof Ze?e.atomValues.delete(t):e.atomValues.set(t,n),e.dirtyAtoms.add(t),e.nonvalidatedAtoms.delete(t)}function rt(e,t){e.replaceState((n=>{const o=it(n);for(const n of t)nt(e,o,n);return lt(e,o),o}))}function at(e,t){if(st.length){const n=st[st.length-1];let o=n.get(e);o||n.set(e,o=[]),o.push(t)}else rt(e,[t])}const st=[];function it(e){return{...e,atomValues:e.atomValues.clone(),nonvalidatedAtoms:e.nonvalidatedAtoms.clone(),dirtyAtoms:new Set(e.dirtyAtoms)}}function lt(e,t){const n=Ge(e,t,t.dirtyAtoms);for(const e of n){var o,r;null===(o=Ke(e))||void 0===o||null===(r=o.invalidate)||void 0===r||r.call(o,t)}}function ct(e,t,n){at(e,{type:"set",recoilValue:t,valueOrUpdater:n})}var ut={RecoilValueReadOnly:et,AbstractRecoilValue:Xe,RecoilState:Qe,getRecoilValueAsLoadable:function(e,{key:t},n=e.getState().currentTree){var o,r;const a=e.getState();n.version!==a.currentTree.version&&n.version!==(null===(o=a.nextTree)||void 0===o?void 0:o.version)&&(n.version,null===(r=a.previousTree)||void 0===r||r.version);const s=je(e,n,t);return"loading"===s.state&&s.contents.catch((()=>{})),s},setRecoilValue:ct,setRecoilValueLoadable:function(e,t,n){if(n instanceof Ze)return ct(e,t,n);at(e,{type:"setLoadable",recoilValue:t,loadable:n})},markRecoilValueModified:function(e,t){at(e,{type:"markModified",recoilValue:t})},setUnvalidatedRecoilValue:function(e,t,n){at(e,{type:"setUnvalidated",recoilValue:t,unvalidatedValue:n})},subscribeToRecoilValue:function(e,{key:t},n,o=null){const r=He(),a=e.getState();a.nodeToComponentSubscriptions.has(t)||a.nodeToComponentSubscriptions.set(t,new Map),c(a.nodeToComponentSubscriptions.get(t)).set(r,[null!=o?o:"",n]);const s=Je();if(s.early&&("LEGACY"===s.mode||"MUTABLE_SOURCE"===s.mode)){const o=e.getState().nextTree;o&&o.dirtyAtoms.has(t)&&n(o)}return{release:()=>{const n=e.getState(),o=n.nodeToComponentSubscriptions.get(t);void 0!==o&&o.has(r)&&(o.delete(r),0===o.size&&n.nodeToComponentSubscriptions.delete(t))}}},isRecoilValue:tt,applyAtomValueWrites:function(e,t){const n=e.clone();return t.forEach(((e,t)=>{"hasValue"===e.state&&e.contents instanceof Ze?n.delete(t):n.set(t,e)})),n},batchStart:function(){const e=new Map;return st.push(e),()=>{for(const[t,n]of e)rt(t,n);st.pop()}},writeLoadableToTreeState:ot,invalidateDownstreams:lt,copyTreeState:it,refreshRecoilValue:function(e,t){var n;const{currentTree:o}=e.getState(),r=qe(t.key);null===(n=r.clearCache)||void 0===n||n.call(r,e,o)},invalidateDownstreams_FOR_TESTING:lt},dt=function(e,t,n){const o=e.entries();let r=o.next();for(;!r.done;){const a=r.value;if(t.call(n,a[1],a[0],e))return!0;r=o.next()}return!1};const{cleanUpNode:ft}=Pe,{deleteNodeConfigIfPossible:ht,getNode:pt}=Q,{RetentionZone:yt}=Re,vt=new Set;function _t(e,t){const n=e.getState(),o=n.currentTree;if(n.nextTree)return;const r=new Set;for(const e of t)if(e instanceof yt)for(const t of mt(n,e))r.add(t);else r.add(e);const a=function(e,t){const n=e.getState(),o=n.currentTree,r=e.getGraph(o.version),a=new Set,s=new Set;return function t(i){const l=new Set,u=function(e,t,n,o,r){const a=e.getGraph(t.version),s=[],i=new Set;for(;n.size>0;)l(c(n.values().next().value));return s;function l(e){if(o.has(e)||r.has(e))return void n.delete(e);if(i.has(e))return;const t=a.nodeToNodeSubscriptions.get(e);if(t)for(const e of t)l(e);i.add(e),n.delete(e),s.push(e)}}(e,o,i,a,s);for(const e of u){var d;if("recoilRoot"===pt(e).retainedBy){s.add(e);continue}if((null!==(d=n.retention.referenceCounts.get(e))&&void 0!==d?d:0)>0){s.add(e);continue}if(gt(e).some((e=>n.retention.referenceCounts.get(e)))){s.add(e);continue}const t=r.nodeToNodeSubscriptions.get(e);t&&dt(t,(e=>s.has(e)))?s.add(e):(a.add(e),l.add(e))}const f=new Set;for(const e of l)for(const t of null!==(h=r.nodeDeps.get(e))&&void 0!==h?h:vt){var h;a.has(t)||f.add(t)}f.size&&t(f)}(t),a}(e,r);for(const t of a)St(e,o,t)}function St(e,t,n){if(!z("recoil_memory_managament_2020"))return;ft(e,n);const o=e.getState();o.knownAtoms.delete(n),o.knownSelectors.delete(n),o.nodeTransactionSubscriptions.delete(n),o.retention.referenceCounts.delete(n);const r=gt(n);for(const e of r){var a;null===(a=o.retention.nodesRetainedByZone.get(e))||void 0===a||a.delete(n)}t.atomValues.delete(n),t.dirtyAtoms.delete(n),t.nonvalidatedAtoms.delete(n);const s=o.graphsByVersion.get(t.version);if(s){const e=s.nodeDeps.get(n);if(void 0!==e){s.nodeDeps.delete(n);for(const t of e){var i;null===(i=s.nodeToNodeSubscriptions.get(t))||void 0===i||i.delete(n)}}s.nodeToNodeSubscriptions.delete(n)}ht(n)}function mt(e,t){var n;return null!==(n=e.retention.nodesRetainedByZone.get(t))&&void 0!==n?n:vt}function gt(e){const t=pt(e).retainedBy;return void 0===t||"components"===t||"recoilRoot"===t?[]:t instanceof yt?[t]:t}function Rt(e,t){z("recoil_memory_managament_2020")&&(e.getState().retention.referenceCounts.delete(t),function(e,t){const n=e.getState();n.nextTree?n.retention.retainablesToCheckForRelease.add(t):_t(e,new Set([t]))}(e,t))}var Tt={SUSPENSE_TIMEOUT_MS:12e4,updateRetainCount:function(e,t,n){var o;if(!z("recoil_memory_managament_2020"))return;const r=e.getState().retention.referenceCounts,a=(null!==(o=r.get(t))&&void 0!==o?o:0)+n;0===a?Rt(e,t):r.set(t,a)},updateRetainCountToZero:Rt,releaseScheduledRetainablesNow:function(e){if(!z("recoil_memory_managament_2020"))return;const t=e.getState();_t(e,t.retention.retainablesToCheckForRelease),t.retention.retainablesToCheckForRelease.clear()},retainedByOptionWithDefault:function(e){return void 0===e?"recoilRoot":e}};const{unstable_batchedUpdates:bt}=s();var wt={unstable_batchedUpdates:bt};const{unstable_batchedUpdates:At}=wt;var Nt={unstable_batchedUpdates:At};const{batchStart:Et}=ut,{unstable_batchedUpdates:kt}=Nt;let Vt=kt;var Lt={getBatcher:()=>Vt,setBatcher:e=>{Vt=e},batchUpdates:e=>{Vt((()=>{let t=()=>{};try{t=Et(),e()}finally{t()}}))}},Mt={isSSR:"undefined"==typeof window,isReactNative:"undefined"!=typeof navigator&&"ReactNative"===navigator.product},Ut={memoizeWithArgsHash:function(e,t){let n;return(...o)=>{n||(n={});const r=t(...o);return Object.hasOwnProperty.call(n,r)||(n[r]=e.apply(this,o)),n[r]}},memoizeOneWithArgsHash:function(e,t){let n,o;return(...r)=>{const a=t(...r);return n===a||(n=a,o=e.apply(this,r)),o}},memoizeOneWithArgsHashAndInvalidation:function(e,t){let n,o;return[(...r)=>{const a=t(...r);return n===a||(n=a,o=e.apply(this,r)),o},()=>{n=null}]}};const{batchUpdates:Ct}=Lt,{initializeNode:Bt,peekNodeInfo:It}=Pe,{graph:Dt}=ue,{getNextStoreID:Ot}=pe,{DEFAULT_VALUE:Pt,recoilValues:xt,recoilValuesForKeys:Ft}=Q,{AbstractRecoilValue:zt,getRecoilValueAsLoadable:Wt,setRecoilValue:Gt,setUnvalidatedRecoilValue:jt}=ut,{updateRetainCount:$t}=Tt,{getNextTreeStateVersion:Ht,makeEmptyStoreState:qt}=me,{isSSR:Kt}=Mt,{memoizeOneWithArgsHashAndInvalidation:Zt}=Ut;class Yt{constructor(e){u(this,"_store",void 0),u(this,"_refCount",1),u(this,"getLoadable",(e=>(this.checkRefCount_INTERNAL(),Wt(this._store,e)))),u(this,"getPromise",(e=>(this.checkRefCount_INTERNAL(),this.getLoadable(e).toPromise()))),u(this,"getNodes_UNSTABLE",(e=>{if(this.checkRefCount_INTERNAL(),!0===(null==e?void 0:e.isModified)){if(!1===(null==e?void 0:e.isInitialized))return[];const t=this._store.getState().currentTree;return Ft(t.dirtyAtoms)}const t=this._store.getState().knownAtoms,n=this._store.getState().knownSelectors;return null==(null==e?void 0:e.isInitialized)?xt.values():!0===e.isInitialized?Ft(function*(e){for(const t of e)for(const e of t)yield e}([this._store.getState().knownAtoms,this._store.getState().knownSelectors])):be(xt.values(),(({key:e})=>!t.has(e)&&!n.has(e)))})),u(this,"getInfo_UNSTABLE",(({key:e})=>(this.checkRefCount_INTERNAL(),It(this._store,this._store.getState().currentTree,e)))),u(this,"map",(e=>{this.checkRefCount_INTERNAL();const t=new en(this,Ct);return e(t),t})),u(this,"asyncMap",(async e=>{this.checkRefCount_INTERNAL();const t=new en(this,Ct);return t.retain(),await e(t),t.autoRelease_INTERNAL(),t})),this._store={storeID:Ot(),getState:()=>e,replaceState:t=>{e.currentTree=t(e.currentTree)},getGraph:t=>{const n=e.graphsByVersion;if(n.has(t))return c(n.get(t));const o=Dt();return n.set(t,o),o},subscribeToTransactions:()=>({release:()=>{}}),addTransactionMetadata:()=>{throw i("Cannot subscribe to Snapshots")}};for(const e of this._store.getState().knownAtoms)Bt(this._store,e,"get"),$t(this._store,e,1);this.autoRelease_INTERNAL()}retain(){this._refCount,this._refCount++;let e=!1;return()=>{e||(e=!0,this._release())}}autoRelease_INTERNAL(){Kt||window.setTimeout((()=>this._release()),0)}_release(){if(this._refCount--,0===this._refCount){if(this._store.getState().nodeCleanupFunctions.forEach((e=>e())),this._store.getState().nodeCleanupFunctions.clear(),!z("recoil_memory_managament_2020"))return}else this._refCount}isRetained(){return this._refCount>0}checkRefCount_INTERNAL(){z("recoil_memory_managament_2020")&&this._refCount}getStore_INTERNAL(){return this.checkRefCount_INTERNAL(),this._store}getID(){return this.checkRefCount_INTERNAL(),this._store.getState().currentTree.stateID}}function Jt(e,t,n=!1){const o=e.getState(),r=n?Ht():t.version;return{currentTree:n?{version:r,stateID:r,transactionMetadata:{...t.transactionMetadata},dirtyAtoms:new Set(t.dirtyAtoms),atomValues:t.atomValues.clone(),nonvalidatedAtoms:t.nonvalidatedAtoms.clone()}:t,commitDepth:0,nextTree:null,previousTree:null,knownAtoms:new Set(o.knownAtoms),knownSelectors:new Set(o.knownSelectors),transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:(new Map).set(r,e.getGraph(t.version)),retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map(W(o.nodeCleanupFunctions.entries(),(([e])=>[e,()=>{}])))}}const[Xt,Qt]=Zt(((e,t)=>{const n=e.getState(),o="current"===t?n.currentTree:c(n.previousTree);return new Yt(Jt(e,o))}),((e,t)=>{var n;return String(t)+String(e.storeID)+String(e.getState().currentTree.version)+String(null===(n=e.getState().previousTree)||void 0===n?void 0:n.version)}));class en extends Yt{constructor(e,t){super(Jt(e.getStore_INTERNAL(),e.getStore_INTERNAL().getState().currentTree,!0)),u(this,"_batch",void 0),u(this,"set",((e,t)=>{this.checkRefCount_INTERNAL();const n=this.getStore_INTERNAL();this._batch((()=>{$t(n,e.key,1),Gt(this.getStore_INTERNAL(),e,t)}))})),u(this,"reset",(e=>{this.checkRefCount_INTERNAL();const t=this.getStore_INTERNAL();this._batch((()=>{$t(t,e.key,1),Gt(this.getStore_INTERNAL(),e,Pt)}))})),u(this,"setUnvalidatedAtomValues_DEPRECATED",(e=>{this.checkRefCount_INTERNAL();const t=this.getStore_INTERNAL();Ct((()=>{for(const[n,o]of e.entries())$t(t,n,1),jt(t,new zt(n),o)}))})),this._batch=t}}var tn={Snapshot:Yt,MutableSnapshot:en,freshSnapshot:function(e){const t=new Yt(qt());return null!=e?t.map(e):t},cloneSnapshot:function(e,t="current"){const n=Xt(e,t);return n.isRetained()?n:(Qt(),Xt(e,t))}},nn=tn.Snapshot,on=tn.MutableSnapshot,rn=tn.freshSnapshot,an=tn.cloneSnapshot,sn=Object.freeze({__proto__:null,Snapshot:nn,MutableSnapshot:on,freshSnapshot:rn,cloneSnapshot:an}),ln=function(...e){const t=new Set;for(const n of e)for(const e of n)t.add(e);return t};const{useRef:cn}=r();var un=function(e){const t=cn(e);return t.current===e&&"function"==typeof e&&(t.current=e()),t};const{getNextTreeStateVersion:dn,makeEmptyStoreState:fn}=me,{cleanUpNode:hn,getDownstreamNodes:pn,initializeNode:yn,setNodeValue:vn,setUnvalidatedAtomValue_DEPRECATED:_n}=Pe,{graph:Sn}=ue,{cloneGraph:mn}=ue,{getNextStoreID:gn}=pe,{createMutableSource:Rn,reactMode:Tn}=We,{applyAtomValueWrites:bn}=ut,{releaseScheduledRetainablesNow:wn}=Tt,{freshSnapshot:An}=sn,{useCallback:Nn,useContext:En,useEffect:kn,useMemo:Vn,useRef:Ln,useState:Mn}=r();function Un(){throw i("This component must be used inside a component.")}const Cn=Object.freeze({storeID:gn(),getState:Un,replaceState:Un,getGraph:Un,subscribeToTransactions:Un,addTransactionMetadata:Un});let Bn=!1;function In(e){if(Bn)throw i("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions.");const t=e.getState();if(null===t.nextTree){z("recoil_memory_managament_2020")&&z("recoil_release_on_cascading_update_killswitch_2021")&&t.commitDepth>0&&wn(e);const n=t.currentTree.version,o=dn();t.nextTree={...t.currentTree,version:o,stateID:o,dirtyAtoms:new Set,transactionMetadata:{}},t.graphsByVersion.set(o,mn(c(t.graphsByVersion.get(n))))}}const Dn=r().createContext({current:Cn}),On=()=>En(Dn),Pn=r().createContext(null);function xn(e,t,n){const o=pn(e,n,n.dirtyAtoms);for(const e of o){const o=t.nodeToComponentSubscriptions.get(e);if(o)for(const[e,[t,r]]of o)r(n)}}function Fn(e){const t=e.getState(),n=t.currentTree,o=n.dirtyAtoms;if(o.size){for(const[n,r]of t.nodeTransactionSubscriptions)if(o.has(n))for(const[t,n]of r)n(e);for(const[n,o]of t.transactionSubscriptions)o(e);(!Tn().early||t.suspendedComponentResolvers.size>0)&&(xn(e,t,n),t.suspendedComponentResolvers.forEach((e=>e())),t.suspendedComponentResolvers.clear())}t.queuedComponentCallbacks_DEPRECATED.forEach((e=>e(n))),t.queuedComponentCallbacks_DEPRECATED.splice(0,t.queuedComponentCallbacks_DEPRECATED.length)}function zn({setNotifyBatcherOfChange:e}){const t=On(),[,n]=Mn([]);return e((()=>n({}))),kn((()=>(e((()=>n({}))),()=>{e((()=>{}))})),[e]),kn((()=>{ee("Batcher",(()=>{!function(e){const t=e.getState();t.commitDepth++;try{const{nextTree:n}=t;if(null===n)return;t.previousTree=t.currentTree,t.currentTree=n,t.nextTree=null,Fn(e),null!=t.previousTree&&t.graphsByVersion.delete(t.previousTree.version),t.previousTree=null,z("recoil_memory_managament_2020")&&wn(e)}finally{t.commitDepth--}}(t.current)}))})),null}let Wn=0;function Gn({initializeState_DEPRECATED:e,initializeState:t,store_INTERNAL:n,children:o}){let a;const s=e=>{const t=a.current.graphsByVersion;if(t.has(e))return c(t.get(e));const n=Sn();return t.set(e,n),n},i=(e,t)=>{if(null==t){const{transactionSubscriptions:t}=h.current.getState(),n=Wn++;return t.set(n,e),{release:()=>{t.delete(n)}}}{const{nodeTransactionSubscriptions:n}=h.current.getState();n.has(t)||n.set(t,new Map);const o=Wn++;return c(n.get(t)).set(o,e),{release:()=>{const e=n.get(t);e&&(e.delete(o),0===e.size&&n.delete(t))}}}},l=e=>{In(h.current);for(const t of Object.keys(e))c(h.current.getState().nextTree).transactionMetadata[t]=e[t]},u=e=>{In(h.current);const t=c(a.current.nextTree);let n;try{Bn=!0,n=e(t)}finally{Bn=!1}n!==t&&(a.current.nextTree=n,Tn().early&&xn(h.current,a.current,n),c(d.current)())},d=Ln(null),f=Nn((e=>{d.current=e}),[d]),h=un((()=>null!=n?n:{storeID:gn(),getState:()=>a.current,replaceState:u,getGraph:s,subscribeToTransactions:i,addTransactionMetadata:l}));null!=n&&(h.current=n),a=un((()=>null!=e?function(e,t){const n=fn();return t({set:(t,o)=>{const r=n.currentTree,a=vn(e,r,t.key,o),s=new Set(a.keys()),i=r.nonvalidatedAtoms.clone();for(const e of s)i.delete(e);n.currentTree={...r,dirtyAtoms:ln(r.dirtyAtoms,s),atomValues:bn(r.atomValues,a),nonvalidatedAtoms:i}},setUnvalidatedAtomValues:e=>{e.forEach(((e,t)=>{n.currentTree=_n(n.currentTree,t,e)}))}}),n}(h.current,e):null!=t?function(e){const t=An().map(e),n=t.getStore_INTERNAL().getState();return t.retain(),n.nodeCleanupFunctions.forEach((e=>e())),n.nodeCleanupFunctions.clear(),n}(t):fn()));const p=Vn((()=>null==Rn?void 0:Rn(a,(()=>a.current.currentTree.version))),[a]);return kn((()=>{const e=h.current;for(const t of new Set(e.getState().knownAtoms))yn(e,t,"get");return()=>{for(const t of e.getState().knownAtoms)hn(e,t)}}),[h]),r().createElement(Dn.Provider,{value:h},r().createElement(Pn.Provider,{value:p},r().createElement(zn,{setNotifyBatcherOfChange:f}),o))}var jn={RecoilRoot:function(e){const{override:t,...n}=e,o=On();return!1===t&&o.current!==Cn?e.children:r().createElement(Gn,n)},useStoreRef:On,useRecoilMutableSource:function(){const e=En(Pn);return e},useRecoilStoreID:function(){return On().current.storeID},notifyComponents_FOR_TESTING:xn,sendEndOfBatchNotifications_FOR_TESTING:Fn};const{useEffect:$n,useRef:Hn}=r();var qn=function(e){const t=Hn();return $n((()=>{t.current=e})),t.current};const{useStoreRef:Kn}=jn,{SUSPENSE_TIMEOUT_MS:Zn}=Tt,{updateRetainCount:Yn}=Tt,{RetentionZone:Jn}=Re,{useEffect:Xn,useRef:Qn}=r(),{isSSR:eo}=Mt;var to=function(e){if(z("recoil_memory_managament_2020"))return function(e){const t=(Array.isArray(e)?e:[e]).map((e=>e instanceof Jn?e:e.key)),n=Kn();Xn((()=>{if(!z("recoil_memory_managament_2020"))return;const e=n.current;if(o.current&&!eo)window.clearTimeout(o.current),o.current=null;else for(const n of t)Yn(e,n,1);return()=>{for(const n of t)Yn(e,n,-1)}}),[n,...t]);const o=Qn(),r=qn(t);if(!(eo||void 0!==r&&function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0,o=e.length;n{o.current=null;for(const n of t)Yn(e,n,-1)}),Zn)}}(e)};const{useRef:no}=r();var oo=function(){return no(),""};const{batchUpdates:ro}=Lt,{DEFAULT_VALUE:ao}=Q,{reactMode:so,useMutableSource:io,useSyncExternalStore:lo}=We,{useRecoilMutableSource:co,useStoreRef:uo}=jn,{isRecoilValue:fo}=P,{AbstractRecoilValue:ho,getRecoilValueAsLoadable:po,setRecoilValue:yo,setUnvalidatedRecoilValue:vo,subscribeToRecoilValue:_o}=ut,{useCallback:So,useEffect:mo,useMemo:go,useRef:Ro,useState:To}=r(),{setByAddingToSet:bo}=Te;function wo(e,t,n){if("hasValue"===e.state)return e.contents;if("loading"===e.state)throw new Promise((e=>{n.current.getState().suspendedComponentResolvers.add(e)}));throw"hasError"===e.state?e.contents:i(`Invalid value of loadable atom "${t.key}"`)}function Ao(e){const t=uo(),n=oo(),o=So((()=>{var n;const o=t.current,r=o.getState(),a=so().early&&null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree;return{loadable:po(o,e,a),key:e.key}}),[t,e]),r=So((e=>{let t;return()=>{var n,o;const r=e();return null!==(n=t)&&void 0!==n&&n.loadable.is(r.loadable)&&(null===(o=t)||void 0===o?void 0:o.key)===r.key?t:(t=r,r)}}),[]),a=go((()=>r(o)),[o,r]),s=So((o=>{const r=t.current;return _o(r,e,o,n).release}),[t,e,n]);return lo(s,a,a).loadable}function No(e){const t=uo(),n=So((()=>{var n;const o=t.current,r=o.getState(),a=so().early&&null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree;return po(o,e,a)}),[t,e]),o=So((()=>n()),[n]),r=oo(),a=So(((o,a)=>{const s=t.current;return _o(s,e,(()=>{if(!z("recoil_suppress_rerender_in_callback"))return a();const e=n();c.current.is(e)||a(),c.current=e}),r).release}),[t,e,r,n]),s=co();if(null==s)throw i("Recoil hooks must be used in components contained within a component.");const l=io(s,o,a),c=Ro(l);return mo((()=>{c.current=l})),l}function Eo(e){const t=uo(),n=oo(),o=So((()=>{var n;const o=t.current,r=o.getState(),a=so().early&&null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree;return po(o,e,a)}),[t,e]),r=So((()=>({loadable:o(),key:e.key})),[o,e.key]),a=So((e=>{const t=r();return e.loadable.is(t.loadable)&&e.key===t.key?e:t}),[r]);mo((()=>{const o=_o(t.current,e,(e=>{i(a)}),n);return i(a),o.release}),[n,e,t,a]);const[s,i]=To(r);return s.key!==e.key?r().loadable:s.loadable}function ko(e){const t=uo(),[,n]=To([]),o=oo(),r=So((()=>{var n;const o=t.current,r=o.getState(),a=so().early&&null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree;return po(o,e,a)}),[t,e]),a=r(),s=Ro(a);return mo((()=>{s.current=a})),mo((()=>{const a=t.current,i=a.getState(),l=_o(a,e,(e=>{var t;if(!z("recoil_suppress_rerender_in_callback"))return n([]);const o=r();null!==(t=s.current)&&void 0!==t&&t.is(o)||n(o),s.current=o}),o);if(i.nextTree)a.getState().queuedComponentCallbacks_DEPRECATED.push((()=>{s.current=null,n([])}));else{var c;if(!z("recoil_suppress_rerender_in_callback"))return n([]);const e=r();null!==(c=s.current)&&void 0!==c&&c.is(e)||n(e),s.current=e}return l.release}),[o,r,e,t]),a}function Vo(e){return z("recoil_memory_managament_2020")&&to(e),{TRANSITION_SUPPORT:Eo,SYNC_EXTERNAL_STORE:Ao,MUTABLE_SOURCE:No,LEGACY:ko}[so().mode](e)}function Lo(e){const t=uo();return wo(Vo(e),e,t)}function Mo(e){const t=uo();return So((n=>{yo(t.current,e,n)}),[t,e])}function Uo(e){return z("recoil_memory_managament_2020")&&to(e),Eo(e)}function Co(e){const t=uo();return wo(Uo(e),e,t)}var Bo={recoilComponentGetRecoilValueCount_FOR_TESTING:{current:0},useRecoilInterface:function(){const e=oo(),t=uo(),[,n]=To([]),o=Ro(new Set);o.current=new Set;const r=Ro(new Set),a=Ro(new Map),s=So((e=>{const t=a.current.get(e);t&&(t.release(),a.current.delete(e))}),[a]),i=So(((e,t)=>{a.current.has(t)&&n([])}),[]);return mo((()=>{const n=t.current;ie(o.current,r.current).forEach((t=>{if(a.current.has(t))return;const o=_o(n,new ho(t),(e=>i(e,t)),e);a.current.set(t,o),n.getState().nextTree?n.getState().queuedComponentCallbacks_DEPRECATED.push((()=>{i(n.getState(),t)})):i(n.getState(),t)})),ie(r.current,o.current).forEach((e=>{s(e)})),r.current=o.current})),mo((()=>{const n=a.current;return ie(o.current,new Set(n.keys())).forEach((o=>{const r=_o(t.current,new ho(o),(e=>i(e,o)),e);n.set(o,r)})),()=>n.forEach(((e,t)=>s(t)))}),[e,t,s,i]),go((()=>{function e(e){return n=>{yo(t.current,e,n)}}function n(e){var n;o.current.has(e.key)||(o.current=bo(o.current,e.key));const r=t.current.getState();return po(t.current,e,so().early&&null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree)}function r(e){return wo(n(e),e,t)}return{getRecoilValue:r,getRecoilValueLoadable:n,getRecoilState:function(t){return[r(t),e(t)]},getRecoilStateLoadable:function(t){return[n(t),e(t)]},getSetRecoilState:e,getResetRecoilState:function(e){return()=>yo(t.current,e,ao)}}}),[o,t])},useRecoilState:function(e){return[Lo(e),Mo(e)]},useRecoilStateLoadable:function(e){return[Vo(e),Mo(e)]},useRecoilValue:Lo,useRecoilValueLoadable:Vo,useResetRecoilState:function(e){const t=uo();return So((()=>{yo(t.current,e,ao)}),[t,e])},useSetRecoilState:Mo,useSetUnvalidatedAtomValues:function(){const e=uo();return(t,n={})=>{ro((()=>{e.current.addTransactionMetadata(n),t.forEach(((t,n)=>vo(e.current,new ho(n),t)))}))}},useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:Uo,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:Co,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:function(e){return[Co(e),Mo(e)]}};const{batchUpdates:Io}=Lt,{DEFAULT_VALUE:Do,getNode:Oo,nodes:Po}=Q,{useStoreRef:xo}=jn,{AbstractRecoilValue:Fo,setRecoilValueLoadable:zo}=ut,{SUSPENSE_TIMEOUT_MS:Wo}=Tt,{cloneSnapshot:Go}=sn,{useCallback:jo,useEffect:$o,useRef:Ho,useState:qo}=r(),{isSSR:Ko}=Mt;function Zo(e){const t=xo();$o((()=>t.current.subscribeToTransactions(e).release),[e,t])}function Yo(e){const t=e.atomValues.toMap(),n=le(function(e,t){const n=new Map;for(const[o,r]of e)t(r,o)&&n.set(o,r);return n}(t,((e,t)=>{const n=Oo(t).persistence_UNSTABLE;return null!=n&&"none"!==n.type&&"hasValue"===e.state})),(e=>e.contents));return function(...e){const t=new Map;for(let n=0;n{const n=new Set;for(const e of[r.atomValues.keys(),a.atomValues.keys()])for(const t of e){var o,s;(null===(o=r.atomValues.get(t))||void 0===o?void 0:o.contents)!==(null===(s=a.atomValues.get(t))||void 0===s?void 0:s.contents)&&Oo(t).shouldRestoreFromSnapshots&&n.add(t)}n.forEach((t=>{zo(e,new Fo(t),a.atomValues.has(t)?c(a.atomValues.get(t)):Do)})),e.replaceState((e=>({...e,stateID:t.getID()})))}))}var Xo={useRecoilSnapshot:function(){const e=xo(),[t,n]=qo((()=>Go(e.current))),o=qn(t),r=Ho(),a=Ho();var s;(Zo(jo((e=>n(Go(e))),[])),$o((()=>{const e=t.retain();var n;return r.current&&!Ko&&(window.clearTimeout(r.current),r.current=null,null===(n=a.current)||void 0===n||n.call(a),a.current=null),e}),[t]),o===t||Ko)||(r.current&&(window.clearTimeout(r.current),r.current=null,null===(s=a.current)||void 0===s||s.call(a),a.current=null),a.current=t.retain(),r.current=window.setTimeout((()=>{var e;r.current=null,null===(e=a.current)||void 0===e||e.call(a),a.current=null}),Wo));return t},gotoSnapshot:Jo,useGotoRecoilSnapshot:function(){const e=xo();return jo((t=>Jo(e.current,t)),[e])},useRecoilTransactionObserver:function(e){Zo(jo((t=>{const n=Go(t,"current"),o=Go(t,"previous");e({snapshot:n,previousSnapshot:o})}),[e]))},useTransactionObservation_DEPRECATED:function(e){Zo(jo((t=>{let n=t.getState().previousTree;const o=t.getState().currentTree;n||(n=t.getState().currentTree);const r=Yo(o),a=Yo(n),s=le(Po,(e=>{var t,n,o,r;return{persistence_UNSTABLE:{type:null!==(t=null===(n=e.persistence_UNSTABLE)||void 0===n?void 0:n.type)&&void 0!==t?t:"none",backButton:null!==(o=null===(r=e.persistence_UNSTABLE)||void 0===r?void 0:r.backButton)&&void 0!==o&&o}}})),i=function(e,t){const n=new Set;for(const o of e)t(o)&&n.add(o);return n}(o.dirtyAtoms,(e=>r.has(e)||a.has(e)));e({atomValues:r,previousAtomValues:a,atomInfo:s,modifiedAtoms:i,transactionMetadata:{...o.transactionMetadata}})}),[e]))},useTransactionSubscription_DEPRECATED:Zo};const{peekNodeInfo:Qo}=Pe,{useStoreRef:er}=jn;const{reactMode:tr}=We,{RecoilRoot:nr,useStoreRef:or}=jn,{useMemo:rr}=r();const{loadableWithValue:ar}=V,{initializeNode:sr}=Pe,{DEFAULT_VALUE:ir,getNode:lr}=Q,{copyTreeState:cr,getRecoilValueAsLoadable:ur,invalidateDownstreams:dr,writeLoadableToTreeState:fr}=ut;function hr(e){return"atom"===lr(e.key).nodeType}class pr{constructor(e,t){u(this,"_store",void 0),u(this,"_treeState",void 0),u(this,"_changes",void 0),u(this,"get",(e=>{if(this._changes.has(e.key))return this._changes.get(e.key);if(!hr(e))throw i("Reading selectors within atomicUpdate is not supported");const t=ur(this._store,e,this._treeState);if("hasValue"===t.state)return t.contents;throw"hasError"===t.state?t.contents:i(`Expected Recoil atom ${e.key} to have a value, but it is in a loading state.`)})),u(this,"set",((e,t)=>{if(!hr(e))throw i("Setting selectors within atomicUpdate is not supported");if("function"==typeof t){const n=this.get(e);this._changes.set(e.key,t(n))}else sr(this._store,e.key,"set"),this._changes.set(e.key,t)})),u(this,"reset",(e=>{this.set(e,ir)})),this._store=e,this._treeState=t,this._changes=new Map}newTreeState_INTERNAL(){if(0===this._changes.size)return this._treeState;const e=cr(this._treeState);for(const[t,n]of this._changes)fr(e,t,ar(n));return dr(this._store,e),e}}var yr=function(e){return t=>{e.replaceState((n=>{const o=new pr(e,n);return t(o),o.newTreeState_INTERNAL()}))}},vr=Object.freeze({__proto__:null,atomicUpdater:yr}),_r=function(e,t){if(!e)throw new Error(t)};const{atomicUpdater:Sr}=vr,{batchUpdates:mr}=Lt,{DEFAULT_VALUE:gr}=Q,{useStoreRef:Rr}=jn,{refreshRecoilValue:Tr,setRecoilValue:br}=ut,{Snapshot:wr,cloneSnapshot:Ar}=sn,{gotoSnapshot:Nr}=Xo,{useCallback:Er}=r();class kr{}const Vr=new kr;function Lr(e,t,n,o){let r=Vr;return mr((()=>{const a="useRecoilCallback() expects a function that returns a function: it accepts a function of the type (RecoilInterface) => (Args) => ReturnType and returns a callback function (Args) => ReturnType, where RecoilInterface is an object {snapshot, set, ...} and Args and ReturnType are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details.";if("function"!=typeof t)throw i(a);const s=we({...null!=o?o:{},set:(t,n)=>br(e,t,n),reset:t=>br(e,t,gr),refresh:t=>Tr(e,t),gotoSnapshot:t=>Nr(e,t),transact_UNSTABLE:t=>Sr(e)(t)},{snapshot:()=>Ar(e)}),l=t(s);if("function"!=typeof l)throw i(a);r=l(...n)})),r instanceof kr&&_r(!1),r}var Mr={recoilCallback:Lr,useRecoilCallback:function(e,t){const n=Rr();return Er(((...t)=>Lr(n.current,e,t)),null!=t?[...t,n]:void 0)}};const{useStoreRef:Ur}=jn,{refreshRecoilValue:Cr}=ut,{useCallback:Br}=r();const{atomicUpdater:Ir}=vr,{useStoreRef:Dr}=jn,{useMemo:Or}=r();const Pr=(e,t,n)=>{var o;if(null==e)return;if(null==n||null===(o=n.onNodeVisit)||void 0===o||o.call(n,e),"leaf"===e.type)return e;const r=t(e.nodeKey);return Pr(e.branches.get(r),t,n)},xr=(e,t,n,o,r,a,s)=>{var i;let l;if(null==e)if(0===t.length)l={type:"leaf",value:o,parent:n,branchKey:r};else{const[e,...i]=t,[c,u]=e;l={type:"branch",nodeKey:c,parent:n,branches:new Map,branchKey:r},l.branches.set(u,xr(null,i,l,o,u,a,s))}else if(l=e,t.length){const[n,...r]=t,[i,c]=n;if("branch"!==e.type||e.nodeKey!==i)return s(),l;e.branches.set(c,xr(e.branches.get(c),r,e,o,c,a,s))}return null==a||null===(i=a.onNodeVisit)||void 0===i||i.call(a,l),l},Fr=(e,t,n)=>n?(0===t.branches.size&&n.branches.delete(t.branchKey),Fr(e,n,n.parent)):e===t,zr=e=>"leaf"===e.type?1:Array.from(e.branches.values()).reduce(((e,t)=>e+zr(t)),0);var Wr=Object.freeze({__proto__:null,TreeCache:class{constructor(e){var t,n,o;u(this,"_numLeafs",void 0),u(this,"_root",void 0),u(this,"_onHit",void 0),u(this,"_onSet",void 0),u(this,"_mapNodeValue",void 0),this._numLeafs=0,this._root=null,this._onHit=null!==(t=null==e?void 0:e.onHit)&&void 0!==t?t:()=>{},this._onSet=null!==(n=null==e?void 0:e.onSet)&&void 0!==n?n:()=>{},this._mapNodeValue=null!==(o=null==e?void 0:e.mapNodeValue)&&void 0!==o?o:e=>e}size(){return this._numLeafs}root(){return this._root}get(e,t){var n;return null===(n=this.getLeafNode(e,t))||void 0===n?void 0:n.value}getLeafNode(e,t){return Pr(this.root(),(t=>this._mapNodeValue(e(t))),{onNodeVisit:e=>{null==t||t.onNodeVisit(e),"leaf"===e.type&&this._onHit(e)}})}set(e,t,n){let o,r=null;const a=()=>{r=xr(this.root(),e.map((([e,t])=>[e,this._mapNodeValue(t)])),null,t,null,{onNodeVisit:e=>{null==n||n.onNodeVisit(e),"leaf"===e.type&&(o=e)}},(()=>{this.clear(),a()}))};a(),this.root()||(this._root=r),this._numLeafs++,this._onSet(c(o))}delete(e){if(!this.root())return!1;const t=c(this.root());return!!((e,t,n)=>n?(n.branches.delete(t.branchKey),Fr(e,n,n.parent)):e===t)(t,e,e.parent)&&(e===t||"branch"===t.type&&!t.branches.size?(this._root=null,this._numLeafs=0,!0):(this._numLeafs-=zr(e),!0))}clear(){this._numLeafs=0,this._root=null}}}),Gr=Object.freeze({__proto__:null,LRUCache:class{constructor(e){var t;u(this,"_maxSize",void 0),u(this,"_size",void 0),u(this,"_head",void 0),u(this,"_tail",void 0),u(this,"_map",void 0),u(this,"_keyMapper",void 0),this._maxSize=e.maxSize,this._size=0,this._head=null,this._tail=null,this._map=new Map,this._keyMapper=null!==(t=e.mapKey)&&void 0!==t?t:e=>e}head(){return this._head}tail(){return this._tail}size(){return this._size}maxSize(){return this._maxSize}has(e){return this._map.has(this._keyMapper(e))}get(e){const t=this._keyMapper(e),n=this._map.get(t);if(n)return this.set(e,n.value),n.value}set(e,t){const n=this._keyMapper(e);this._map.get(n)&&this.delete(e);const o=this.head(),r={key:e,right:o,left:null,value:t};o?o.left=r:this._tail=r,this._map.set(n,r),this._head=r,this._size++,this._maybeDeleteLRU()}_maybeDeleteLRU(){this.size()>this.maxSize()&&this.deleteLru()}deleteLru(){const e=this.tail();e&&this.delete(e.key)}delete(e){const t=this._keyMapper(e);if(!this._size||!this._map.has(t))return;const n=c(this._map.get(t)),o=n.right,r=n.left;o&&(o.left=n.left),r&&(r.right=n.right),n===this.head()&&(this._head=o),n===this.tail()&&(this._tail=r),this._map.delete(t),this._size--}clear(){this._size=0,this._head=null,this._tail=null,this._map=new Map}}});const{LRUCache:jr}=Gr,{TreeCache:$r}=Wr;var Hr=function(e,t=(e=>e)){const n=new jr({maxSize:e}),o=new $r({mapNodeValue:t,onHit:e=>{n.set(e,!0)},onSet:t=>{const r=n.tail();n.set(t,!0),r&&o.size()>e&&o.delete(r.key)}});return o};function qr(e,t,n){if("string"==typeof e&&!e.includes('"')&&!e.includes("\\"))return`"${e}"`;switch(typeof e){case"undefined":return"";case"boolean":return e?"true":"false";case"number":case"symbol":return String(e);case"string":return JSON.stringify(e);case"function":if(!0!==(null==t?void 0:t.allowFunctions))throw i("Attempt to serialize function in a Recoil cache key");return`__FUNCTION(${e.name})__`}if(null===e)return"null";var o;if("object"!=typeof e)return null!==(o=JSON.stringify(e))&&void 0!==o?o:"";if(l(e))return"__PROMISE__";if(Array.isArray(e))return`[${e.map(((e,n)=>qr(e,t,n.toString())))}]`;if("function"==typeof e.toJSON)return qr(e.toJSON(n),t,n);if(e instanceof Map){const o={};for(const[n,r]of e)o["string"==typeof n?n:qr(n,t)]=r;return qr(o,t,n)}return e instanceof Set?qr(Array.from(e).sort(((e,n)=>qr(e,t).localeCompare(qr(n,t)))),t,n):void 0!==Symbol&&null!=e[Symbol.iterator]&&"function"==typeof e[Symbol.iterator]?qr(Array.from(e),t,n):`{${Object.keys(e).filter((t=>void 0!==e[t])).sort().map((n=>`${qr(n,t)}:${qr(e[n],t,n)}`)).join(",")}}`}var Kr=function(e,t={allowFunctions:!1}){return qr(e,t)};const{TreeCache:Zr}=Wr,Yr={equality:"reference",eviction:"keep-all",maxSize:1/0};const{isReactNative:Jr,isSSR:Xr}=Mt;const{loadableWithError:Qr,loadableWithPromise:ea,loadableWithValue:ta}=V,{getNodeLoadable:na,peekNodeLoadable:oa,setNodeValue:ra}=Pe,{saveDependencyMapToStore:aa}=ue,{DEFAULT_VALUE:sa,RecoilValueNotReady:ia,getConfigDeletionHandler:la,getNode:ca,registerNode:ua}=Q,{isRecoilValue:da}=P,{markRecoilValueModified:fa}=ut,{retainedByOptionWithDefault:ha}=Tt,{recoilCallback:pa}=Mr,{startPerfBlock:ya}={startPerfBlock:function(e){return()=>null}};class va{}const _a=new va,Sa=[],ma=new Map,ga=(()=>{let e=0;return()=>e++})();var Ra=function(e){let t=null;const{key:n,get:o,cachePolicy_UNSTABLE:r}=e,a=null!=e.set?e.set:void 0,s=new Set,u=function({equality:e=Yr.equality,eviction:t=Yr.eviction,maxSize:n=Yr.maxSize}=Yr){const o=function(e){switch(e){case"reference":return e=>e;case"value":return e=>Kr(e)}throw i(`Unrecognized equality policy ${e}`)}(e),r=function(e,t,n){switch(e){case"keep-all":return new Zr({mapNodeValue:n});case"lru":return Hr(c(t),n);case"most-recent":return Hr(1,n)}throw i(`Unrecognized eviction policy ${e}`)}(t,n,o);return r}(null!=r?r:{equality:"reference",eviction:"keep-all"}),d=ha(e.retainedBy_UNSTABLE),f=new Map;let h=0;function p(){return!z("recoil_memory_managament_2020")||h>0}function y(e){return e.getState().knownSelectors.add(n),h++,()=>{h--}}function v(){return void 0!==la(n)&&!p()}function _(e,t,n,o,r){M(t,o,r),T(e,t,new Set(r.keys()),n),S(e,n)}function S(e,n){L(e,n)&&V(e);const o=ma.get(n);if(void 0!==o){for(const e of o)fa(e,c(t));ma.delete(n)}}function m(e,t){let n=ma.get(t);null==n&&ma.set(t,n=new Set),n.add(e)}function g(e,t,n){const o=e.getState().knownSelectors.has(n);if(o&&t.atomValues.has(n))return c(t.atomValues.get(n));const r=na(e,t,n);return"loading"!==r.state&&o&&t.atomValues.set(n,r),r}function R(e,t,n,o,r,a){return t.then((o=>{if(!p())throw V(e),_a;null!=a.loadingDepKey&&a.loadingDepPromise===t?n.atomValues.set(a.loadingDepKey,ta(o)):e.getState().knownSelectors.forEach((e=>{n.atomValues.delete(e)}));const s=w(e,n);if(s&&"loading"!==s.state){if((L(e,r)||null==E(e))&&S(e,r),"hasValue"===s.state)return s.contents;throw s.contents}if(!L(e,r)){const e=A(n);if("loading"===(null==e?void 0:e.latestLoadable.state))return e.latestLoadable.contents}const[i,l]=b(e,n,r);if(k(e,r,l),"loading"!==i.state&&_(e,n,r,i,l),"hasError"===i.state)throw i.contents;return i.contents})).catch((t=>{if(t instanceof va)throw _a;if(!p())throw V(e),_a;const a=Qr(t);throw _(e,n,r,a,o),t}))}function T(e,t,o,r){var a,i,l,c,u,d,f;(L(e,r)||t.version===(null===(a=e.getState())||void 0===a||null===(i=a.currentTree)||void 0===i?void 0:i.version)||t.version===(null===(l=e.getState())||void 0===l||null===(c=l.nextTree)||void 0===c?void 0:c.version))&&(aa(new Map([[n,o]]),e,null!==(u=null===(d=e.getState())||void 0===d||null===(f=d.nextTree)||void 0===f?void 0:f.version)&&void 0!==u?u:e.getState().currentTree.version),o.forEach((e=>s.add(e))))}function b(e,r,a){const s=ya(n);let c=!0;const u=()=>{s(),c=!1};let d,f,h=!1;const y={loadingDepKey:null,loadingDepPromise:null},v=new Map,S=new Set;function m(t){const{key:n}=t;!function(e,t,n,o,r){n.add(o),T(e,t,n,r)}(e,r,S,n,a);const o=g(e,r,n);switch(v.set(n,o),o.state){case"hasValue":return o.contents;case"hasError":throw o.contents;case"loading":throw y.loadingDepKey=n,y.loadingDepPromise=o.contents,o.contents}throw i("Invalid Loadable state")}T(e,r,S,a);const b=n=>(...o)=>{if(c)throw i("Callbacks from getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can work with Recoil state without a subscription.");return null==t&&_r(!1),pa(e,n,o,{node:t})};try{d=o({get:m,getCallback:b}),d=da(d)?m(d):d,l(d)?d=function(e,t,n,o,r,a){return t.then((t=>{if(!p())throw V(e),_a;const a=ta(t);return _(e,n,r,a,o),t})).catch((t=>{if(!p())throw V(e),_a;if(k(e,r,o),l(t))return R(e,t,n,o,r,a);const s=Qr(t);throw _(e,n,r,s,o),t}))}(e,d,r,v,a,y).finally(u):u()}catch(t){d=t,l(d)?d=R(e,d,r,v,a,y).finally(u):(h=!0,u())}return f=h?Qr(d):l(d)?ea(d):ta(d),[f,v]}function w(e,t){const o=new Set,r=E(e);let a;try{a=u.get((n=>("string"!=typeof n&&_r(!1),g(e,t,n).contents)),{onNodeVisit:e=>{"branch"===e.type&&e.nodeKey!==n&&o.add(e.nodeKey)}})}catch(e){throw i(`Problem with cache lookup for selector "${n}": ${e.message}`)}return a&&T(e,t,o,null==r?void 0:r.latestExecutionId),a}function A(e){var t;const[,n]=null!==(t=Array.from(f.entries()).find((([t,n])=>null!=n.latestLoadable&&null!=n.latestExecutionId&&!function(e,t){var n,o;const r=E(e),a=null!==(n=null==r?void 0:r.depValuesDiscoveredSoFarDuringAsyncWork)&&void 0!==n?n:new Map,s=Array((null!==(o=N.get(t.version))&&void 0!==o?o:new Map).entries()),i=N.has(t.version)&&s.length===a.size&&s.every((([e,t])=>a.get(e)===t));return null!=a&&t.version!==(null==r?void 0:r.stateVersion)&&!i&&(N.set(t.version,new Map(a)),Array.from(a).some((([n,o])=>g(e,t,n).contents!==o.contents)))}(t,e))))&&void 0!==t?t:[];return n}const N=new Map;function E(e){return f.get(e)}function k(e,t,n){if(L(e,t)){const t=E(e);null!=t&&(t.depValuesDiscoveredSoFarDuringAsyncWork=n)}}function V(e){f.delete(e)}function L(e,t){var n;return t===(null===(n=E(e))||void 0===n?void 0:n.latestExecutionId)}function M(e,t,o){e.atomValues.set(n,t);try{u.set(function(e){return Array.from(e.entries()).map((([e,t])=>[e,t.contents]))}(o),t)}catch(e){throw i(`Problem with setting cache for selector "${n}": ${e.message}`)}}function U(e,t){return u.get((n=>{var o;return"string"!=typeof n&&_r(!1),null===(o=oa(e,t,n))||void 0===o?void 0:o.contents}))}function C(e,t){return function(o){if(Sa.includes(n)){const e=`Recoil selector has circular dependencies: ${Sa.slice(Sa.indexOf(n)).join(" → ")}`;return Qr(i(e))}Sa.push(n);try{return function(e,t){const n=w(e,t);if(null!=n)return V(e),n;const o=A(t);var r;return null!=o?("loading"===(null===(r=o.latestLoadable)||void 0===r?void 0:r.state)&&m(e,c(o.latestExecutionId)),c(o.latestLoadable)):function(e,t){const n=ga(),[o,r]=b(e,t,n);return"loading"===o.state?(function(e,t,n,o,r){f.set(e,{depValuesDiscoveredSoFarDuringAsyncWork:o,latestExecutionId:t,latestLoadable:n,stateVersion:r.version})}(e,n,o,r,t),m(e,n)):(V(e),M(t,o,r)),o}(e,t)}(e,t)}finally{Sa.pop()}}()}function B(e){e.atomValues.delete(n)}function I(e,n){null==t&&_r(!1);for(const t of s){var o;const r=ca(t);null===(o=r.clearCache)||void 0===o||o.call(r,e,n)}s.clear(),B(n),u.clear(),fa(e,t)}return t=ua(null!=a?{key:n,nodeType:"selector",peek:U,get:C,set:(e,t,n)=>{let o=!1;const r=new Map;function s({key:n}){if(o)throw i("Recoil: Async selector sets are not currently supported.");const r=g(e,t,n);if("hasValue"===r.state)return r.contents;throw"loading"===r.state?new ia(n):r.contents}function c(n,a){if(o)throw i("Recoil: Async selector sets are not currently supported.");const l="function"==typeof a?a(s(n)):a;ra(e,t,n.key,l).forEach(((e,t)=>r.set(t,e)))}const u=a({set:c,get:s,reset:function(e){c(e,sa)}},n);if(void 0!==u)throw l(u)?i("Recoil: Async selector sets are not currently supported."):i("Recoil: selector set should be a void function.");return o=!0,r},init:y,invalidate:B,clearCache:I,shouldDeleteConfigOnRelease:v,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:d}:{key:n,nodeType:"selector",peek:U,get:C,init:y,invalidate:B,clearCache:I,shouldDeleteConfigOnRelease:v,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:d})};const{loadableWithError:Ta,loadableWithPromise:ba,loadableWithValue:wa}=V,{peekNodeInfo:Aa}=Pe,{DEFAULT_VALUE:Na,DefaultValue:Ea,getConfigDeletionHandler:ka,registerNode:Va,setConfigDeletionHandler:La}=Q,{isRecoilValue:Ma}=P,{getRecoilValueAsLoadable:Ua,markRecoilValueModified:Ca,setRecoilValue:Ba,setRecoilValueLoadable:Ia}=ut,{retainedByOptionWithDefault:Da}=Tt;var Oa=function e(t){const{default:n,...o}=t;return Ma(n)?function(t){const n=e({...t,default:Na,persistence_UNSTABLE:void 0===t.persistence_UNSTABLE?void 0:{...t.persistence_UNSTABLE,validator:e=>e instanceof Ea?e:c(t.persistence_UNSTABLE).validator(e,Na)},effects:t.effects,effects_UNSTABLE:t.effects_UNSTABLE}),o=Ra({key:`${t.key}__withFallback`,get:({get:e})=>{const o=e(n);return o instanceof Ea?t.default:o},set:({set:e},t)=>e(n,t),dangerouslyAllowMutability:t.dangerouslyAllowMutability});return La(o.key,ka(t.key)),o}({...o,default:n}):function(e){const{key:t,persistence_UNSTABLE:n}=e,o=Da(e.retainedBy_UNSTABLE);let r,a=0,s=l(e.default)?ba(e.default.then((e=>(s=wa(e),e))).catch((e=>{throw s=Ta(e),e}))):wa(e.default);e.default;const u=new Map;function d(e,n){var o,a;return null!==(o=null!==(a=n.atomValues.get(t))&&void 0!==a?a:r)&&void 0!==o?o:s}const f=Va({key:t,nodeType:"atom",peek:d,get:function(e,o){if(o.atomValues.has(t))return c(o.atomValues.get(t));if(o.nonvalidatedAtoms.has(t)){if(null!=r)return r;if(null==n)return s;const e=o.nonvalidatedAtoms.get(t),a=n.validator(e,Na),i=a instanceof Ea?s:wa(a);return r=i,r}return s},set:function(e,n,o){if(n.atomValues.has(t)){const e=c(n.atomValues.get(t));if("hasValue"===e.state&&o===e.contents)return new Map}else if(!n.nonvalidatedAtoms.has(t)&&o instanceof Ea)return new Map;return r=void 0,(new Map).set(t,wa(o))},init:function(n,o,r){var c;if(a++,n.getState().knownAtoms.add(t),"loading"===s.state){const e=()=>{var e;(null!==(e=n.getState().nextTree)&&void 0!==e?e:n.getState().currentTree).atomValues.has(t)||Ca(n,f)};s.contents.finally(e)}const h=null!==(c=e.effects)&&void 0!==c?c:e.effects_UNSTABLE;if(null!=h){let e=!0,a=Na,c=!1,v=null;function _(r){if(e&&r.key===t){const e=a;return e instanceof Ea?d(0,o):l(e)?ba(e.then((e=>e instanceof Ea?s.toPromise():e))):wa(e)}return Ua(n,r)}function S(e){return _(e).toPromise()}function m(o){var r;const s=Aa(n,null!==(r=n.getState().nextTree)&&void 0!==r?r:n.getState().currentTree,o.key);return!e||o.key!==t||a instanceof Ea?s:{...s,isSet:!0,loadable:_(o)}}const g=t=>o=>{if(e){const e=_(f),n="hasValue"===e.state?e.contents:Na;a="function"==typeof o?o(n):o,l(a)&&(a=a.then((e=>(v={effect:t,value:e},e))))}else{if(l(o))throw i("Setting atoms to async values is not implemented.");"function"!=typeof o&&(v={effect:t,value:o}),Ba(n,f,"function"==typeof o?e=>{const n=o(e);return v={effect:t,value:n},n}:o)}},R=e=>()=>g(e)(Na),T=e=>o=>{var r;const{release:a}=n.subscribeToTransactions((n=>{var r;let{currentTree:a,previousTree:i}=n.getState();i||(i=a);const l=null!==(r=a.atomValues.get(t))&&void 0!==r?r:s;if("hasValue"===l.state){var c,u,d,f;const n=l.contents,r=null!==(c=i.atomValues.get(t))&&void 0!==c?c:s,h="hasValue"===r.state?r.contents:Na;(null===(u=v)||void 0===u?void 0:u.effect)!==e||(null===(d=v)||void 0===d?void 0:d.value)!==n?o(n,h,!a.atomValues.has(t)):(null===(f=v)||void 0===f?void 0:f.effect)===e&&(v=null)}}),t);u.set(n,[...null!==(r=u.get(n))&&void 0!==r?r:[],a])};for(const e of h)try{const t=e({node:f,storeID:n.storeID,trigger:r,setSelf:g(e),resetSelf:R(e),onSet:T(e),getPromise:S,getLoadable:_,getInfo_UNSTABLE:m});var p;null!=t&&u.set(n,[...null!==(p=u.get(n))&&void 0!==p?p:[],t])}catch(e){a=e,c=!0}if(e=!1,!(a instanceof Ea)){var y;const e=a,r=c?Ta(a):l(e)?ba(function(e,n){const o=n.then((n=>{var r,a;return(null===(a=(null!==(r=e.getState().nextTree)&&void 0!==r?r:e.getState().currentTree).atomValues.get(t))||void 0===a?void 0:a.contents)===o&&Ba(e,f,n),n})).catch((n=>{var r,a;throw(null===(a=(null!==(r=e.getState().nextTree)&&void 0!==r?r:e.getState().currentTree).atomValues.get(t))||void 0===a?void 0:a.contents)===o&&Ia(e,f,Ta(n)),n}));return o}(n,e)):wa(e);o.atomValues.set(t,r),null===(y=n.getState().nextTree)||void 0===y||y.atomValues.set(t,r)}}return()=>{var e;a--,null===(e=u.get(n))||void 0===e||e.forEach((e=>e())),u.delete(n)}},invalidate:function(){r=void 0},shouldDeleteConfigOnRelease:function(){return void 0!==ka(t)&&a<=0},dangerouslyAllowMutability:e.dangerouslyAllowMutability,persistence_UNSTABLE:e.persistence_UNSTABLE?{type:e.persistence_UNSTABLE.type,backButton:e.persistence_UNSTABLE.backButton}:void 0,shouldRestoreFromSnapshots:!0,retainedBy:o});return f}({...o,default:n})},Pa=Object.freeze({__proto__:null,MapCache:class{constructor(e){var t;u(this,"_map",void 0),u(this,"_keyMapper",void 0),this._map=new Map,this._keyMapper=null!==(t=null==e?void 0:e.mapKey)&&void 0!==t?t:e=>e}size(){return this._map.size}has(e){return this._map.has(this._keyMapper(e))}get(e){return this._map.get(this._keyMapper(e))}set(e,t){this._map.set(this._keyMapper(e),t)}delete(e){this._map.delete(this._keyMapper(e))}clear(){this._map.clear()}}});const{LRUCache:xa}=Gr,{MapCache:Fa}=Pa,za={equality:"reference",eviction:"none",maxSize:1/0};var Wa=function({equality:e=za.equality,eviction:t=za.eviction,maxSize:n=za.maxSize}=za){const o=function(e){switch(e){case"reference":return e=>e;case"value":return e=>Kr(e)}throw i(`Unrecognized equality policy ${e}`)}(e),r=function(e,t,n){switch(e){case"keep-all":return new Fa({mapKey:n});case"lru":return new xa({mapKey:n,maxSize:c(t)});case"most-recent":return new xa({mapKey:n,maxSize:1})}throw i(`Unrecognized eviction policy ${e}`)}(t,n,o);return r};const{setConfigDeletionHandler:Ga}=Q;const{setConfigDeletionHandler:ja}=Q;let $a=0;var Ha=function(e){var t,n;const o=Wa({equality:null!==(t=null===(n=e.cachePolicyForParams_UNSTABLE)||void 0===n?void 0:n.equality)&&void 0!==t?t:"value",eviction:"keep-all"});return t=>{var n;const r=o.get(t);if(null!=r)return r;const a=`${e.key}__selectorFamily/${null!==(n=Kr(t,{allowFunctions:!0}))&&void 0!==n?n:"void"}/${$a++}`,s=n=>e.get(t)(n),i=e.cachePolicy_UNSTABLE,l="function"==typeof e.retainedBy_UNSTABLE?e.retainedBy_UNSTABLE(t):e.retainedBy_UNSTABLE;let c;if(null!=e.set){const n=e.set;c=Ra({key:a,get:s,set:(e,o)=>n(t)(e,o),cachePolicy_UNSTABLE:i,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:l})}else c=Ra({key:a,get:s,cachePolicy_UNSTABLE:i,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:l});return o.set(t,c),ja(c.key,(()=>{o.delete(t)})),c}};const qa=Ha({key:"__constant",get:e=>()=>e,cachePolicyForParams_UNSTABLE:{equality:"reference"}});const Ka=Ha({key:"__error",get:e=>()=>{throw i(e)},cachePolicyForParams_UNSTABLE:{equality:"reference"}});const{loadableWithError:Za,loadableWithPromise:Ya,loadableWithValue:Ja}=V;function Xa(e,t){const n=Array(t.length).fill(void 0),o=Array(t.length).fill(void 0);for(const[r,a]of t.entries())try{n[r]=e(a)}catch(e){o[r]=e}return[n,o]}function Qa(e){return null!=e&&!l(e)}function es(e){return Array.isArray(e)?e:Object.getOwnPropertyNames(e).map((t=>e[t]))}function ts(e,t){return Array.isArray(e)?t:Object.getOwnPropertyNames(e).reduce(((e,n,o)=>({...e,[n]:t[o]})),{})}function ns(e,t,n){return ts(e,n.map(((e,n)=>null==e?Ja(t[n]):l(e)?Ya(e):Za(e))))}var os={waitForNone:Ha({key:"__waitForNone",get:e=>({get:t})=>{const n=es(e),[o,r]=Xa(t,n);return ns(e,o,r)},dangerouslyAllowMutability:!0}),waitForAny:Ha({key:"__waitForAny",get:e=>({get:t})=>{const n=es(e),[o,r]=Xa(t,n);return r.some((e=>!l(e)))?ns(e,o,r):new Promise((t=>{for(const[n,a]of r.entries())l(a)&&a.then((a=>{o[n]=a,r[n]=void 0,t(ns(e,o,r))})).catch((a=>{r[n]=a,t(ns(e,o,r))}))}))},dangerouslyAllowMutability:!0}),waitForAll:Ha({key:"__waitForAll",get:e=>({get:t})=>{const n=es(e),[o,r]=Xa(t,n);if(r.every((e=>null==e)))return ts(e,o);const a=r.find(Qa);if(null!=a)throw a;return Promise.all(r).then((t=>{return ts(e,(n=o,t.map(((e,t)=>void 0===e?n[t]:e))));var n}))},dangerouslyAllowMutability:!0}),waitForAllSettled:Ha({key:"__waitForAllSettled",get:e=>({get:t})=>{const n=es(e),[o,r]=Xa(t,n);return r.every((e=>!l(e)))?ns(e,o,r):Promise.all(r.map(((e,t)=>l(e)?e.then((e=>{o[t]=e,r[t]=void 0})).catch((e=>{o[t]=void 0,r[t]=e})):null))).then((()=>ns(e,o,r)))},dangerouslyAllowMutability:!0}),noWait:Ha({key:"__noWait",get:e=>({get:t})=>{try{return Ja(t(e))}catch(e){return l(e)?Ya(e):Za(e)}},dangerouslyAllowMutability:!0})};const{RecoilLoadable:rs}=V,{DefaultValue:as}=Q,{RecoilRoot:ss,useRecoilStoreID:is}=jn,{isRecoilValue:ls}=P,{retentionZone:cs}=Re,{freshSnapshot:us}=sn,{useRecoilState:ds,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:fs,useRecoilStateLoadable:hs,useRecoilValue:ps,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:ys,useRecoilValueLoadable:vs,useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:_s,useResetRecoilState:Ss,useSetRecoilState:ms}=Bo,{useGotoRecoilSnapshot:gs,useRecoilSnapshot:Rs,useRecoilTransactionObserver:Ts}=Xo,{useRecoilCallback:bs}=Mr,{noWait:ws,waitForAll:As,waitForAllSettled:Ns,waitForAny:Es,waitForNone:ks}=os;var Vs={DefaultValue:as,isRecoilValue:ls,RecoilLoadable:rs,RecoilRoot:ss,useRecoilStoreID:is,useRecoilBridgeAcrossReactRoots_UNSTABLE:function(){"MUTABLE_SOURCE"===tr().mode&&console.warn("Warning: There are known issues using useRecoilBridgeAcrossReactRoots() in recoil_mutable_source rendering mode. Please consider upgrading to recoil_sync_external_store mode.");const e=or().current;return rr((()=>function({children:t}){return r().createElement(nr,{store_INTERNAL:e},t)}),[e])},atom:Oa,selector:Ra,atomFamily:function(e){var t,n;const o=Wa({equality:null!==(t=null===(n=e.cachePolicyForParams_UNSTABLE)||void 0===n?void 0:n.equality)&&void 0!==t?t:"value",eviction:"keep-all"});return t=>{var n,r;const a=o.get(t);if(null!=a)return a;const{cachePolicyForParams_UNSTABLE:s,...i}=e,l=Oa({...i,key:`${e.key}__${null!==(n=Kr(t))&&void 0!==n?n:"void"}`,default:"function"==typeof e.default?e.default(t):e.default,retainedBy_UNSTABLE:"function"==typeof e.retainedBy_UNSTABLE?e.retainedBy_UNSTABLE(t):e.retainedBy_UNSTABLE,effects:"function"==typeof e.effects?e.effects(t):"function"==typeof e.effects_UNSTABLE?e.effects_UNSTABLE(t):null!==(r=e.effects)&&void 0!==r?r:e.effects_UNSTABLE});return o.set(t,l),Ga(l.key,(()=>{o.delete(t)})),l}},selectorFamily:Ha,constSelector:function(e){return qa(e)},errorSelector:function(e){return Ka(e)},readOnlySelector:function(e){return e},noWait:ws,waitForNone:ks,waitForAny:Es,waitForAll:As,waitForAllSettled:Ns,useRecoilValue:ps,useRecoilValueLoadable:vs,useRecoilState:ds,useRecoilStateLoadable:hs,useSetRecoilState:ms,useResetRecoilState:Ss,useGetRecoilValueInfo_UNSTABLE:function(){const e=er();return({key:t})=>Qo(e.current,e.current.getState().currentTree,t)},useRecoilRefresher_UNSTABLE:function(e){const t=Ur();return Br((()=>{const n=t.current;Cr(n,e)}),[e,t])},useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:_s,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:ys,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:fs,useRecoilCallback:bs,useRecoilTransaction_UNSTABLE:function(e,t){const n=Dr();return Or((()=>(...t)=>{Ir(n.current)((n=>{e(n)(...t)}))}),null!=t?[...t,n]:void 0)},useGotoRecoilSnapshot:gs,useRecoilSnapshot:Rs,useRecoilTransactionObserver_UNSTABLE:Ts,snapshot_UNSTABLE:us,useRetain:to,retentionZone:cs},Ls=Vs.DefaultValue,Ms=Vs.isRecoilValue,Us=Vs.RecoilLoadable,Cs=Vs.RecoilRoot,Bs=Vs.useRecoilStoreID,Is=Vs.useRecoilBridgeAcrossReactRoots_UNSTABLE,Ds=Vs.atom,Os=Vs.selector,Ps=Vs.atomFamily,xs=Vs.selectorFamily,Fs=Vs.constSelector,zs=Vs.errorSelector,Ws=Vs.readOnlySelector,Gs=Vs.noWait,js=Vs.waitForNone,$s=Vs.waitForAny,Hs=Vs.waitForAll,qs=Vs.waitForAllSettled,Ks=Vs.useRecoilValue,Zs=Vs.useRecoilValueLoadable,Ys=Vs.useRecoilState,Js=Vs.useRecoilStateLoadable,Xs=Vs.useSetRecoilState,Qs=Vs.useResetRecoilState,ei=Vs.useGetRecoilValueInfo_UNSTABLE,ti=Vs.useRecoilRefresher_UNSTABLE,ni=Vs.useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE,oi=Vs.useRecoilValue_TRANSITION_SUPPORT_UNSTABLE,ri=Vs.useRecoilState_TRANSITION_SUPPORT_UNSTABLE,ai=Vs.useRecoilCallback,si=Vs.useRecoilTransaction_UNSTABLE,ii=Vs.useGotoRecoilSnapshot,li=Vs.useRecoilSnapshot,ci=Vs.useRecoilTransactionObserver_UNSTABLE,ui=Vs.snapshot_UNSTABLE,di=Vs.useRetain,fi=Vs.retentionZone;const hi=Vs}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZXMvcmVjb2lsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgcmVhY3REb20gZnJvbSAncmVhY3QtZG9tJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIGVycihtZXNzYWdlKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpOyAvLyBJbiBWOCwgRXJyb3Igb2JqZWN0cyBrZWVwIHRoZSBjbG9zdXJlIHNjb3BlIGNoYWluIGFsaXZlIHVudGlsIHRoZVxuICAvLyBlcnIuc3RhY2sgcHJvcGVydHkgaXMgYWNjZXNzZWQuXG5cbiAgaWYgKGVycm9yLnN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBJRSBzZXRzIHRoZSBzdGFjayBvbmx5IGlmIGVycm9yIGlzIHRocm93blxuICAgIHRyeSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGNhdGNoIChfKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZiLXd3dy9uby11bnVzZWQtY2F0Y2gtYmluZGluZ3MsIG5vLWVtcHR5XG5cbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cblxudmFyIGVycl8xID0gZXJyO1xuXG4vLyBAb3NzLW9ubHlcblxuXG52YXIgUmVjb2lsX2VyciA9IGVycl8xO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gU3BsaXQgZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uIHRvIGFsbG93IHRoaXMgZnVuY3Rpb24gdG8gcHJldGVuZCB0b1xuLy8gY2hlY2sgZm9yIGFjdHVhbCBpbnN0YW5jZSBvZiBQcm9taXNlIGluc3RlYWQgb2Ygc29tZXRoaW5nIHdpdGggYSBgdGhlbmBcbi8vIG1ldGhvZC5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmZ1bmN0aW9uIGlzUHJvbWlzZShwKSB7XG4gIHJldHVybiAhIXAgJiYgdHlwZW9mIHAudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIFJlY29pbF9pc1Byb21pc2UgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIG51bGx0aHJvd3MoeCwgbWVzc2FnZSkge1xuICBpZiAoeCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICB0aHJvdyBSZWNvaWxfZXJyKG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6ICdHb3QgdW5leHBlY3RlZCBudWxsIG9yIHVuZGVmaW5lZCcpO1xufVxuXG52YXIgUmVjb2lsX251bGx0aHJvd3MgPSBudWxsdGhyb3dzO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY2xhc3MgQmFzZUxvYWRhYmxlIHtcbiAgZ2V0VmFsdWUoKSB7XG4gICAgdGhyb3cgUmVjb2lsX2VycignQmFzZUxvYWRhYmxlJyk7XG4gIH1cblxuICB0b1Byb21pc2UoKSB7XG4gICAgdGhyb3cgUmVjb2lsX2VycignQmFzZUxvYWRhYmxlJyk7XG4gIH1cblxuICB2YWx1ZU1heWJlKCkge1xuICAgIHRocm93IFJlY29pbF9lcnIoJ0Jhc2VMb2FkYWJsZScpO1xuICB9XG5cbiAgdmFsdWVPclRocm93KCkge1xuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIHRocm93IFJlY29pbF9lcnIoYExvYWRhYmxlIGV4cGVjdGVkIHZhbHVlLCBidXQgaW4gXCIke3RoaXMuc3RhdGV9XCIgc3RhdGVgKTtcbiAgfVxuXG4gIHByb21pc2VNYXliZSgpIHtcbiAgICB0aHJvdyBSZWNvaWxfZXJyKCdCYXNlTG9hZGFibGUnKTtcbiAgfVxuXG4gIHByb21pc2VPclRocm93KCkge1xuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIHRocm93IFJlY29pbF9lcnIoYExvYWRhYmxlIGV4cGVjdGVkIHByb21pc2UsIGJ1dCBpbiBcIiR7dGhpcy5zdGF0ZX1cIiBzdGF0ZWApO1xuICB9XG5cbiAgZXJyb3JNYXliZSgpIHtcbiAgICB0aHJvdyBSZWNvaWxfZXJyKCdCYXNlTG9hZGFibGUnKTtcbiAgfVxuXG4gIGVycm9yT3JUaHJvdygpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICB0aHJvdyBSZWNvaWxfZXJyKGBMb2FkYWJsZSBleHBlY3RlZCBlcnJvciwgYnV0IGluIFwiJHt0aGlzLnN0YXRlfVwiIHN0YXRlYCk7XG4gIH1cblxuICBpcyhvdGhlcikge1xuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIHJldHVybiBvdGhlci5zdGF0ZSA9PT0gdGhpcy5zdGF0ZSAmJiBvdGhlci5jb250ZW50cyA9PT0gdGhpcy5jb250ZW50cztcbiAgfVxuXG4gIG1hcChfbWFwKSB7XG4gICAgdGhyb3cgUmVjb2lsX2VycignQmFzZUxvYWRhYmxlJyk7XG4gIH1cblxufVxuXG5jbGFzcyBWYWx1ZUxvYWRhYmxlIGV4dGVuZHMgQmFzZUxvYWRhYmxlIHtcbiAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdGVcIiwgJ2hhc1ZhbHVlJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb250ZW50c1wiLCB2b2lkIDApO1xuXG4gICAgdGhpcy5jb250ZW50cyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudHM7XG4gIH1cblxuICB0b1Byb21pc2UoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbnRlbnRzKTtcbiAgfVxuXG4gIHZhbHVlTWF5YmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudHM7XG4gIH1cblxuICB2YWx1ZU9yVGhyb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudHM7XG4gIH1cblxuICBwcm9taXNlTWF5YmUoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVycm9yTWF5YmUoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIG1hcChtYXApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV4dCA9IG1hcCh0aGlzLmNvbnRlbnRzKTtcbiAgICAgIHJldHVybiBSZWNvaWxfaXNQcm9taXNlKG5leHQpID8gbG9hZGFibGVXaXRoUHJvbWlzZShuZXh0KSA6IGlzTG9hZGFibGUobmV4dCkgPyBuZXh0IDogbG9hZGFibGVXaXRoVmFsdWUobmV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIFJlY29pbF9pc1Byb21pc2UoZSkgPyAvLyBJZiB3ZSBcInN1c3BlbmRlZFwiLCB0aGVuIHRyeSBhZ2Fpbi5cbiAgICAgIC8vIGVycm9ycyBhbmQgc3Vic2VxdWVudCByZXRyaWVzIHdpbGwgYmUgaGFuZGxlZCBpbiAnbG9hZGluZycgY2FzZVxuICAgICAgbG9hZGFibGVXaXRoUHJvbWlzZShlLm5leHQoKCkgPT4gdGhpcy5tYXAobWFwKSkpIDogbG9hZGFibGVXaXRoRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgRXJyb3JMb2FkYWJsZSBleHRlbmRzIEJhc2VMb2FkYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGVycm9yKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXRlXCIsICdoYXNFcnJvcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGVudHNcIiwgdm9pZCAwKTtcblxuICAgIHRoaXMuY29udGVudHMgPSBlcnJvcjtcbiAgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHRocm93IHRoaXMuY29udGVudHM7XG4gIH1cblxuICB0b1Byb21pc2UoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuY29udGVudHMpO1xuICB9XG5cbiAgdmFsdWVNYXliZSgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvbWlzZU1heWJlKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBlcnJvck1heWJlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRzO1xuICB9XG5cbiAgZXJyb3JPclRocm93KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRzO1xuICB9XG5cbiAgbWFwKF9tYXApIHtcbiAgICAvLyAkRmxvd0lzc3VlW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxufVxuXG5jbGFzcyBMb2FkaW5nTG9hZGFibGUgZXh0ZW5kcyBCYXNlTG9hZGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm9taXNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXRlXCIsICdsb2FkaW5nJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb250ZW50c1wiLCB2b2lkIDApO1xuXG4gICAgdGhpcy5jb250ZW50cyA9IHByb21pc2U7XG4gIH1cblxuICBnZXRWYWx1ZSgpIHtcbiAgICB0aHJvdyB0aGlzLmNvbnRlbnRzO1xuICB9XG5cbiAgdG9Qcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRzO1xuICB9XG5cbiAgdmFsdWVNYXliZSgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvbWlzZU1heWJlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRzO1xuICB9XG5cbiAgcHJvbWlzZU9yVGhyb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudHM7XG4gIH1cblxuICBlcnJvck1heWJlKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBtYXAobWFwKSB7XG4gICAgcmV0dXJuIGxvYWRhYmxlV2l0aFByb21pc2UodGhpcy5jb250ZW50cy50aGVuKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBtYXAodmFsdWUpO1xuXG4gICAgICBpZiAoaXNMb2FkYWJsZShuZXh0KSkge1xuICAgICAgICBjb25zdCBuZXh0TG9hZGFibGUgPSBuZXh0O1xuXG4gICAgICAgIHN3aXRjaCAobmV4dExvYWRhYmxlLnN0YXRlKSB7XG4gICAgICAgICAgY2FzZSAnaGFzVmFsdWUnOlxuICAgICAgICAgICAgcmV0dXJuIG5leHRMb2FkYWJsZS5jb250ZW50cztcblxuICAgICAgICAgIGNhc2UgJ2hhc0Vycm9yJzpcbiAgICAgICAgICAgIHRocm93IG5leHRMb2FkYWJsZS5jb250ZW50cztcblxuICAgICAgICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIG5leHRMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgfVxuICAgICAgfSAvLyAkRmxvd0lzc3VlW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cblxuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoUmVjb2lsX2lzUHJvbWlzZShlKSkge1xuICAgICAgICAvLyB3ZSB3ZXJlIFwic3VzcGVuZGVkLFwiIHRyeSBhZ2FpblxuICAgICAgICByZXR1cm4gZS50aGVuKCgpID0+IHRoaXMubWFwKG1hcCkuY29udGVudHMpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH0pKTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGxvYWRhYmxlV2l0aFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG5ldyBWYWx1ZUxvYWRhYmxlKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRhYmxlV2l0aEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG5ldyBFcnJvckxvYWRhYmxlKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRhYmxlV2l0aFByb21pc2UocHJvbWlzZSkge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuZXcgTG9hZGluZ0xvYWRhYmxlKHByb21pc2UpKTtcbn1cblxuZnVuY3Rpb24gbG9hZGFibGVMb2FkaW5nKCkge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuZXcgTG9hZGluZ0xvYWRhYmxlKG5ldyBQcm9taXNlKCgpID0+IHt9KSkpO1xufVxuXG5mdW5jdGlvbiBsb2FkYWJsZUFsbEFycmF5KGlucHV0cykge1xuICByZXR1cm4gaW5wdXRzLmV2ZXJ5KGkgPT4gaS5zdGF0ZSA9PT0gJ2hhc1ZhbHVlJykgPyBsb2FkYWJsZVdpdGhWYWx1ZShpbnB1dHMubWFwKGkgPT4gaS5jb250ZW50cykpIDogaW5wdXRzLnNvbWUoaSA9PiBpLnN0YXRlID09PSAnaGFzRXJyb3InKSA/IGxvYWRhYmxlV2l0aEVycm9yKFJlY29pbF9udWxsdGhyb3dzKGlucHV0cy5maW5kKGkgPT4gaS5zdGF0ZSA9PT0gJ2hhc0Vycm9yJyksICdJbnZhbGlkIGxvYWRhYmxlIHBhc3NlZCB0byBsb2FkYWJsZUFsbCcpLmNvbnRlbnRzKSA6IGxvYWRhYmxlV2l0aFByb21pc2UoUHJvbWlzZS5hbGwoaW5wdXRzLm1hcChpID0+IGkuY29udGVudHMpKSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRhYmxlQWxsKGlucHV0cykge1xuICBjb25zdCB1bndyYXBlZElucHV0cyA9IEFycmF5LmlzQXJyYXkoaW5wdXRzKSA/IGlucHV0cyA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGlucHV0cykubWFwKGtleSA9PiBpbnB1dHNba2V5XSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRJbnB1dHMgPSB1bndyYXBlZElucHV0cy5tYXAoeCA9PiBpc0xvYWRhYmxlKHgpID8geCA6IFJlY29pbF9pc1Byb21pc2UoeCkgPyBsb2FkYWJsZVdpdGhQcm9taXNlKHgpIDogbG9hZGFibGVXaXRoVmFsdWUoeCkpO1xuICBjb25zdCBvdXRwdXQgPSBsb2FkYWJsZUFsbEFycmF5KG5vcm1hbGl6ZWRJbnB1dHMpO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dHMpID8gLy8gJEZsb3dJc3N1ZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICBvdXRwdXQgOiAvLyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygpIGhhcyBjb25zaXN0ZW50IGtleSBvcmRlcmluZyB3aXRoIEVTNlxuICAvLyAkRmxvd0lzc3VlW2luY29tcGF0aWJsZS1jYWxsXVxuICBvdXRwdXQubWFwKG91dHB1dHMgPT4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5wdXRzKS5yZWR1Y2UoKG91dCwga2V5LCBpZHgpID0+ICh7IC4uLm91dCxcbiAgICBba2V5XTogb3V0cHV0c1tpZHhdXG4gIH0pLCB7fSkpO1xufVxuXG5mdW5jdGlvbiBpc0xvYWRhYmxlKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBCYXNlTG9hZGFibGU7XG59XG5cbmNvbnN0IExvYWRhYmxlU3RhdGljSW50ZXJmYWNlID0ge1xuICBvZjogdmFsdWUgPT4gUmVjb2lsX2lzUHJvbWlzZSh2YWx1ZSkgPyBsb2FkYWJsZVdpdGhQcm9taXNlKHZhbHVlKSA6IGlzTG9hZGFibGUodmFsdWUpID8gdmFsdWUgOiBsb2FkYWJsZVdpdGhWYWx1ZSh2YWx1ZSksXG4gIGVycm9yOiBlcnJvciA9PiBsb2FkYWJsZVdpdGhFcnJvcihlcnJvciksXG4gIC8vICRGbG93SXNzdWVbdW5jbGVhci10eXBlXVxuICBhbGw6IGxvYWRhYmxlQWxsLFxuICBpc0xvYWRhYmxlXG59O1xudmFyIFJlY29pbF9Mb2FkYWJsZSA9IHtcbiAgbG9hZGFibGVXaXRoVmFsdWUsXG4gIGxvYWRhYmxlV2l0aEVycm9yLFxuICBsb2FkYWJsZVdpdGhQcm9taXNlLFxuICBsb2FkYWJsZUxvYWRpbmcsXG4gIGxvYWRhYmxlQWxsLFxuICBpc0xvYWRhYmxlLFxuICBSZWNvaWxMb2FkYWJsZTogTG9hZGFibGVTdGF0aWNJbnRlcmZhY2Vcbn07XG5cbnZhciBSZWNvaWxfTG9hZGFibGVfMSA9IFJlY29pbF9Mb2FkYWJsZS5sb2FkYWJsZVdpdGhWYWx1ZTtcbnZhciBSZWNvaWxfTG9hZGFibGVfMiA9IFJlY29pbF9Mb2FkYWJsZS5sb2FkYWJsZVdpdGhFcnJvcjtcbnZhciBSZWNvaWxfTG9hZGFibGVfMyA9IFJlY29pbF9Mb2FkYWJsZS5sb2FkYWJsZVdpdGhQcm9taXNlO1xudmFyIFJlY29pbF9Mb2FkYWJsZV80ID0gUmVjb2lsX0xvYWRhYmxlLmxvYWRhYmxlTG9hZGluZztcbnZhciBSZWNvaWxfTG9hZGFibGVfNSA9IFJlY29pbF9Mb2FkYWJsZS5sb2FkYWJsZUFsbDtcbnZhciBSZWNvaWxfTG9hZGFibGVfNiA9IFJlY29pbF9Mb2FkYWJsZS5pc0xvYWRhYmxlO1xudmFyIFJlY29pbF9Mb2FkYWJsZV83ID0gUmVjb2lsX0xvYWRhYmxlLlJlY29pbExvYWRhYmxlO1xuXG52YXIgUmVjb2lsX0xvYWRhYmxlJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgbG9hZGFibGVXaXRoVmFsdWU6IFJlY29pbF9Mb2FkYWJsZV8xLFxuICBsb2FkYWJsZVdpdGhFcnJvcjogUmVjb2lsX0xvYWRhYmxlXzIsXG4gIGxvYWRhYmxlV2l0aFByb21pc2U6IFJlY29pbF9Mb2FkYWJsZV8zLFxuICBsb2FkYWJsZUxvYWRpbmc6IFJlY29pbF9Mb2FkYWJsZV80LFxuICBsb2FkYWJsZUFsbDogUmVjb2lsX0xvYWRhYmxlXzUsXG4gIGlzTG9hZGFibGU6IFJlY29pbF9Mb2FkYWJsZV82LFxuICBSZWNvaWxMb2FkYWJsZTogUmVjb2lsX0xvYWRhYmxlXzdcbn0pO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5jbGFzcyBBYnN0cmFjdFJlY29pbFZhbHVlIHtcbiAgY29uc3RydWN0b3IobmV3S2V5KSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwia2V5XCIsIHZvaWQgMCk7XG5cbiAgICB0aGlzLmtleSA9IG5ld0tleTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlY29pbFN0YXRlIGV4dGVuZHMgQWJzdHJhY3RSZWNvaWxWYWx1ZSB7fVxuXG5jbGFzcyBSZWNvaWxWYWx1ZVJlYWRPbmx5IGV4dGVuZHMgQWJzdHJhY3RSZWNvaWxWYWx1ZSB7fVxuXG5mdW5jdGlvbiBpc1JlY29pbFZhbHVlKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWNvaWxTdGF0ZSB8fCB4IGluc3RhbmNlb2YgUmVjb2lsVmFsdWVSZWFkT25seTtcbn1cblxudmFyIFJlY29pbF9SZWNvaWxWYWx1ZSA9IHtcbiAgQWJzdHJhY3RSZWNvaWxWYWx1ZSxcbiAgUmVjb2lsU3RhdGUsXG4gIFJlY29pbFZhbHVlUmVhZE9ubHksXG4gIGlzUmVjb2lsVmFsdWVcbn07XG5cbnZhciBSZWNvaWxfUmVjb2lsVmFsdWVfMSA9IFJlY29pbF9SZWNvaWxWYWx1ZS5BYnN0cmFjdFJlY29pbFZhbHVlO1xudmFyIFJlY29pbF9SZWNvaWxWYWx1ZV8yID0gUmVjb2lsX1JlY29pbFZhbHVlLlJlY29pbFN0YXRlO1xudmFyIFJlY29pbF9SZWNvaWxWYWx1ZV8zID0gUmVjb2lsX1JlY29pbFZhbHVlLlJlY29pbFZhbHVlUmVhZE9ubHk7XG52YXIgUmVjb2lsX1JlY29pbFZhbHVlXzQgPSBSZWNvaWxfUmVjb2lsVmFsdWUuaXNSZWNvaWxWYWx1ZTtcblxudmFyIFJlY29pbF9SZWNvaWxWYWx1ZSQxID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFic3RyYWN0UmVjb2lsVmFsdWU6IFJlY29pbF9SZWNvaWxWYWx1ZV8xLFxuICBSZWNvaWxTdGF0ZTogUmVjb2lsX1JlY29pbFZhbHVlXzIsXG4gIFJlY29pbFZhbHVlUmVhZE9ubHk6IFJlY29pbF9SZWNvaWxWYWx1ZV8zLFxuICBpc1JlY29pbFZhbHVlOiBSZWNvaWxfUmVjb2lsVmFsdWVfNFxufSk7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBzcHJpbnRmKGZvcm1hdCwgLi4uYXJncykge1xuICBsZXQgaW5kZXggPSAwO1xuICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoLyVzL2csICgpID0+IFN0cmluZyhhcmdzW2luZGV4KytdKSk7XG59XG5cbnZhciBzcHJpbnRmXzEgPSBzcHJpbnRmO1xuXG5mdW5jdGlvbiBleHBlY3RhdGlvblZpb2xhdGlvbihmb3JtYXQsIC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzcHJpbnRmXzEuY2FsbChudWxsLCBmb3JtYXQsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIGVycm9yLm5hbWUgPSAnRXhwZWN0YXRpb24gVmlvbGF0aW9uJztcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgfVxufVxuXG52YXIgZXhwZWN0YXRpb25WaW9sYXRpb25fMSA9IGV4cGVjdGF0aW9uVmlvbGF0aW9uO1xuXG4vLyBAb3NzLW9ubHlcblxuXG52YXIgUmVjb2lsX2V4cGVjdGF0aW9uVmlvbGF0aW9uID0gZXhwZWN0YXRpb25WaW9sYXRpb25fMTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmNvbnN0IGdrcyA9IG5ldyBNYXAoKS5zZXQoJ3JlY29pbF9oYW10XzIwMjAnLCB0cnVlKS5zZXQoJ3JlY29pbF9zeW5jX2V4dGVybmFsX3N0b3JlJywgdHJ1ZSkuc2V0KCdyZWNvaWxfc3VwcHJlc3NfcmVyZW5kZXJfaW5fY2FsbGJhY2snLCB0cnVlKS5zZXQoJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJywgdHJ1ZSk7XG5cbmZ1bmN0aW9uIFJlY29pbF9na3hfT1NTKGdrKSB7XG4gIHZhciBfZ2tzJGdldDtcblxuICByZXR1cm4gKF9na3MkZ2V0ID0gZ2tzLmdldChnaykpICE9PSBudWxsICYmIF9na3MkZ2V0ICE9PSB2b2lkIDAgPyBfZ2tzJGdldCA6IGZhbHNlO1xufVxuXG5SZWNvaWxfZ2t4X09TUy5zZXRQYXNzID0gZ2sgPT4ge1xuICBna3Muc2V0KGdrLCB0cnVlKTtcbn07XG5cblJlY29pbF9na3hfT1NTLnNldEZhaWwgPSBnayA9PiB7XG4gIGdrcy5zZXQoZ2ssIGZhbHNlKTtcbn07XG5cblJlY29pbF9na3hfT1NTLmNsZWFyID0gKCkgPT4ge1xuICBna3MuY2xlYXIoKTtcbn07XG5cbnZhciBSZWNvaWxfZ2t4ID0gUmVjb2lsX2dreF9PU1M7IC8vIEBvc3Mtb25seVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBpdGVyYWJsZSB3aG9zZSBvdXRwdXQgaXMgZ2VuZXJhdGVkIGJ5IHBhc3NpbmcgdGhlIGlucHV0XG4gKiBpdGVyYWJsZSdzIHZhbHVlcyB0aHJvdWdoIHRoZSBtYXBwZXIgZnVuY3Rpb24uXG4gKi9cblxuZnVuY3Rpb24gbWFwSXRlcmFibGUoaXRlcmFibGUsIGNhbGxiYWNrKSB7XG4gIC8vIFVzZSBnZW5lcmF0b3IgdG8gY3JlYXRlIGl0ZXJhYmxlL2l0ZXJhdG9yXG4gIHJldHVybiBmdW5jdGlvbiogKCkge1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICB5aWVsZCBjYWxsYmFjayh2YWx1ZSwgaW5kZXgrKyk7XG4gICAgfVxuICB9KCk7XG59XG5cbnZhciBSZWNvaWxfbWFwSXRlcmFibGUgPSBtYXBJdGVyYWJsZTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIHJlY292ZXJhYmxlVmlvbGF0aW9uKG1lc3NhZ2UsIHByb2plY3ROYW1lLCB7XG4gIGVycm9yXG59ID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgZXJyb3IpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciByZWNvdmVyYWJsZVZpb2xhdGlvbl8xID0gcmVjb3ZlcmFibGVWaW9sYXRpb247XG5cbi8vIEBvc3Mtb25seVxuXG5cbnZhciBSZWNvaWxfcmVjb3ZlcmFibGVWaW9sYXRpb24gPSByZWNvdmVyYWJsZVZpb2xhdGlvbl8xO1xuXG5jbGFzcyBEZWZhdWx0VmFsdWUge31cblxuY29uc3QgREVGQVVMVF9WQUxVRSA9IG5ldyBEZWZhdWx0VmFsdWUoKTtcblxuY2xhc3MgUmVjb2lsVmFsdWVOb3RSZWFkeSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgc3VwZXIoYFRyaWVkIHRvIHNldCB0aGUgdmFsdWUgb2YgUmVjb2lsIHNlbGVjdG9yICR7a2V5fSB1c2luZyBhbiB1cGRhdGVyIGZ1bmN0aW9uLCBidXQgaXQgaXMgYW4gYXN5bmMgc2VsZWN0b3IgaW4gYSBwZW5kaW5nIG9yIGVycm9yIHN0YXRlOyB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gIH1cblxufVxuXG4vLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuY29uc3Qgbm9kZXMgPSBuZXcgTWFwKCk7IC8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5cbmNvbnN0IHJlY29pbFZhbHVlcyA9IG5ldyBNYXAoKTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlZGVjbGFyZSAqL1xuXG5mdW5jdGlvbiByZWNvaWxWYWx1ZXNGb3JLZXlzKGtleXMpIHtcbiAgcmV0dXJuIFJlY29pbF9tYXBJdGVyYWJsZShrZXlzLCBrZXkgPT4gUmVjb2lsX251bGx0aHJvd3MocmVjb2lsVmFsdWVzLmdldChrZXkpKSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShub2RlKSB7XG4gIGlmIChub2Rlcy5oYXMobm9kZS5rZXkpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBEdXBsaWNhdGUgYXRvbSBrZXkgXCIke25vZGUua2V5fVwiLiBUaGlzIGlzIGEgRkFUQUwgRVJST1IgaW5cbiAgICAgIHByb2R1Y3Rpb24uIEJ1dCBpdCBpcyBzYWZlIHRvIGlnbm9yZSB0aGlzIHdhcm5pbmcgaWYgaXQgb2NjdXJyZWQgYmVjYXVzZSBvZlxuICAgICAgaG90IG1vZHVsZSByZXBsYWNlbWVudC5gOyAvLyBUT0RPIE5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHN0YW5kYXJkL29wZW4tc291cmNlIGVxdWl2YWxlbnQgdG8gc2VlIGlmIGhvdCBtb2R1bGUgcmVwbGFjZW1lbnQgaXMgaGFwcGVuaW5nOlxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIC8vIEBmYi1vbmx5OiBpZiAoX19ERVZfXykge1xuICAgIC8vIEBmYi1vbmx5OiBjb25zdCBpc0FjY2VwdGluZ1VwZGF0ZSA9IHJlcXVpcmUoJ19fZGVidWcnKS5pc0FjY2VwdGluZ1VwZGF0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyBAZmItb25seTogaWYgKHR5cGVvZiBpc0FjY2VwdGluZ1VwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhaXNBY2NlcHRpbmdVcGRhdGUoKSkge1xuICAgIC8vIEBmYi1vbmx5OiBleHBlY3RhdGlvblZpb2xhdGlvbihtZXNzYWdlLCAncmVjb2lsJyk7XG4gICAgLy8gQGZiLW9ubHk6IH1cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyBAZmItb25seTogfSBlbHNlIHtcbiAgICAvLyBAZmItb25seTogcmVjb3ZlcmFibGVWaW9sYXRpb24obWVzc2FnZSwgJ3JlY29pbCcpO1xuICAgIC8vIEBmYi1vbmx5OiB9XG5cbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7IC8vIEBvc3Mtb25seVxuICB9XG5cbiAgbm9kZXMuc2V0KG5vZGUua2V5LCBub2RlKTtcbiAgY29uc3QgcmVjb2lsVmFsdWUgPSBub2RlLnNldCA9PSBudWxsID8gbmV3IFJlY29pbF9SZWNvaWxWYWx1ZSQxLlJlY29pbFZhbHVlUmVhZE9ubHkobm9kZS5rZXkpIDogbmV3IFJlY29pbF9SZWNvaWxWYWx1ZSQxLlJlY29pbFN0YXRlKG5vZGUua2V5KTtcbiAgcmVjb2lsVmFsdWVzLnNldChub2RlLmtleSwgcmVjb2lsVmFsdWUpO1xuICByZXR1cm4gcmVjb2lsVmFsdWU7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXJlZGVjbGFyZSAqL1xuXG5cbmNsYXNzIE5vZGVNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7fSAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuXG5cbmZ1bmN0aW9uIGdldE5vZGUoa2V5KSB7XG4gIGNvbnN0IG5vZGUgPSBub2Rlcy5nZXQoa2V5KTtcblxuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IE5vZGVNaXNzaW5nRXJyb3IoYE1pc3NpbmcgZGVmaW5pdGlvbiBmb3IgUmVjb2lsVmFsdWU6IFwiJHtrZXl9XCJcImApO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IC8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZU1heWJlKGtleSkge1xuICByZXR1cm4gbm9kZXMuZ2V0KGtleSk7XG59XG5cbmNvbnN0IGNvbmZpZ0RlbGV0aW9uSGFuZGxlcnMgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIGRlbGV0ZU5vZGVDb25maWdJZlBvc3NpYmxlKGtleSkge1xuICB2YXIgX25vZGUkc2hvdWxkRGVsZXRlQ29uO1xuXG4gIGlmICghUmVjb2lsX2dreCgncmVjb2lsX21lbW9yeV9tYW5hZ2FtZW50XzIwMjAnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBub2Rlcy5nZXQoa2V5KTtcblxuICBpZiAobm9kZSAhPT0gbnVsbCAmJiBub2RlICE9PSB2b2lkIDAgJiYgKF9ub2RlJHNob3VsZERlbGV0ZUNvbiA9IG5vZGUuc2hvdWxkRGVsZXRlQ29uZmlnT25SZWxlYXNlKSAhPT0gbnVsbCAmJiBfbm9kZSRzaG91bGREZWxldGVDb24gIT09IHZvaWQgMCAmJiBfbm9kZSRzaG91bGREZWxldGVDb24uY2FsbChub2RlKSkge1xuICAgIHZhciBfZ2V0Q29uZmlnRGVsZXRpb25IYW47XG5cbiAgICBub2Rlcy5kZWxldGUoa2V5KTtcbiAgICAoX2dldENvbmZpZ0RlbGV0aW9uSGFuID0gZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyKGtleSkpID09PSBudWxsIHx8IF9nZXRDb25maWdEZWxldGlvbkhhbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2dldENvbmZpZ0RlbGV0aW9uSGFuKCk7XG4gICAgY29uZmlnRGVsZXRpb25IYW5kbGVycy5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDb25maWdEZWxldGlvbkhhbmRsZXIoa2V5LCBmbikge1xuICBpZiAoIVJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm4gPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZ0RlbGV0aW9uSGFuZGxlcnMuZGVsZXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnRGVsZXRpb25IYW5kbGVycy5zZXQoa2V5LCBmbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyKGtleSkge1xuICByZXR1cm4gY29uZmlnRGVsZXRpb25IYW5kbGVycy5nZXQoa2V5KTtcbn1cblxudmFyIFJlY29pbF9Ob2RlID0ge1xuICBub2RlcyxcbiAgcmVjb2lsVmFsdWVzLFxuICByZWdpc3Rlck5vZGUsXG4gIGdldE5vZGUsXG4gIGdldE5vZGVNYXliZSxcbiAgZGVsZXRlTm9kZUNvbmZpZ0lmUG9zc2libGUsXG4gIHNldENvbmZpZ0RlbGV0aW9uSGFuZGxlcixcbiAgZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyLFxuICByZWNvaWxWYWx1ZXNGb3JLZXlzLFxuICBOb2RlTWlzc2luZ0Vycm9yLFxuICBEZWZhdWx0VmFsdWUsXG4gIERFRkFVTFRfVkFMVUUsXG4gIFJlY29pbFZhbHVlTm90UmVhZHlcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBlbnF1ZXVlRXhlY3V0aW9uKHMsIGYpIHtcbiAgZigpO1xufVxuXG52YXIgUmVjb2lsX1F1ZXVlID0ge1xuICBlbnF1ZXVlRXhlY3V0aW9uXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDb21tb25qc01vZHVsZShmbiwgbW9kdWxlKSB7XG5cdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbn1cblxudmFyIGhhbXRfMSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmo7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG4vKipcbiAgICBAZmlsZU92ZXJ2aWV3IEhhc2ggQXJyYXkgTWFwcGVkIFRyaWUuXG5cbiAgICBDb2RlIGJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vZXhjbGlweS9wZGF0YVxuKi9cblxuXG52YXIgaGFtdCA9IHt9OyAvLyBleHBvcnRcblxuLyogQ29uZmlndXJhdGlvblxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxudmFyIFNJWkUgPSA1O1xudmFyIEJVQ0tFVF9TSVpFID0gTWF0aC5wb3coMiwgU0laRSk7XG52YXIgTUFTSyA9IEJVQ0tFVF9TSVpFIC0gMTtcbnZhciBNQVhfSU5ERVhfTk9ERSA9IEJVQ0tFVF9TSVpFIC8gMjtcbnZhciBNSU5fQVJSQVlfTk9ERSA9IEJVQ0tFVF9TSVpFIC8gNDtcbi8qXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG52YXIgbm90aGluZyA9IHt9O1xuXG52YXIgY29uc3RhbnQgPSBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59O1xuLyoqXG4gICAgR2V0IDMyIGJpdCBoYXNoIG9mIHN0cmluZy5cblxuICAgIEJhc2VkIG9uOlxuICAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzYxNjQ2MS9nZW5lcmF0ZS1hLWhhc2gtZnJvbS1zdHJpbmctaW4tamF2YXNjcmlwdC1qcXVlcnlcbiovXG5cblxudmFyIGhhc2ggPSBoYW10Lmhhc2ggPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yoc3RyKTtcbiAgaWYgKHR5cGUgPT09ICdudW1iZXInKSByZXR1cm4gc3RyO1xuICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHN0ciArPSAnJztcbiAgdmFyIGhhc2ggPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjIHwgMDtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufTtcbi8qIEJpdCBPcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIEhhbW1pbmcgd2VpZ2h0LlxuXG4gICAgVGFrZW4gZnJvbTogaHR0cDovL2pzcGVyZi5jb20vaGFtbWluZy13ZWlnaHRcbiovXG5cblxudmFyIHBvcGNvdW50ID0gZnVuY3Rpb24gcG9wY291bnQoeCkge1xuICB4IC09IHggPj4gMSAmIDB4NTU1NTU1NTU7XG4gIHggPSAoeCAmIDB4MzMzMzMzMzMpICsgKHggPj4gMiAmIDB4MzMzMzMzMzMpO1xuICB4ID0geCArICh4ID4+IDQpICYgMHgwZjBmMGYwZjtcbiAgeCArPSB4ID4+IDg7XG4gIHggKz0geCA+PiAxNjtcbiAgcmV0dXJuIHggJiAweDdmO1xufTtcblxudmFyIGhhc2hGcmFnbWVudCA9IGZ1bmN0aW9uIGhhc2hGcmFnbWVudChzaGlmdCwgaCkge1xuICByZXR1cm4gaCA+Pj4gc2hpZnQgJiBNQVNLO1xufTtcblxudmFyIHRvQml0bWFwID0gZnVuY3Rpb24gdG9CaXRtYXAoeCkge1xuICByZXR1cm4gMSA8PCB4O1xufTtcblxudmFyIGZyb21CaXRtYXAgPSBmdW5jdGlvbiBmcm9tQml0bWFwKGJpdG1hcCwgYml0KSB7XG4gIHJldHVybiBwb3Bjb3VudChiaXRtYXAgJiBiaXQgLSAxKTtcbn07XG4vKiBBcnJheSBPcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIFNldCBhIHZhbHVlIGluIGFuIGFycmF5LlxuXG4gICAgQHBhcmFtIG11dGF0ZSBTaG91bGQgdGhlIGlucHV0IGFycmF5IGJlIG11dGF0ZWQ/XG4gICAgQHBhcmFtIGF0IEluZGV4IHRvIGNoYW5nZS5cbiAgICBAcGFyYW0gdiBOZXcgdmFsdWVcbiAgICBAcGFyYW0gYXJyIEFycmF5LlxuKi9cblxuXG52YXIgYXJyYXlVcGRhdGUgPSBmdW5jdGlvbiBhcnJheVVwZGF0ZShtdXRhdGUsIGF0LCB2LCBhcnIpIHtcbiAgdmFyIG91dCA9IGFycjtcblxuICBpZiAoIW11dGF0ZSkge1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIG91dCA9IG5ldyBBcnJheShsZW4pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgb3V0W2ldID0gYXJyW2ldO1xuICAgIH1cbiAgfVxuXG4gIG91dFthdF0gPSB2O1xuICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICAgIFJlbW92ZSBhIHZhbHVlIGZyb20gYW4gYXJyYXkuXG5cbiAgICBAcGFyYW0gbXV0YXRlIFNob3VsZCB0aGUgaW5wdXQgYXJyYXkgYmUgbXV0YXRlZD9cbiAgICBAcGFyYW0gYXQgSW5kZXggdG8gcmVtb3ZlLlxuICAgIEBwYXJhbSBhcnIgQXJyYXkuXG4qL1xuXG5cbnZhciBhcnJheVNwbGljZU91dCA9IGZ1bmN0aW9uIGFycmF5U3BsaWNlT3V0KG11dGF0ZSwgYXQsIGFycikge1xuICB2YXIgbmV3TGVuID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciBpID0gMDtcbiAgdmFyIGcgPSAwO1xuICB2YXIgb3V0ID0gYXJyO1xuXG4gIGlmIChtdXRhdGUpIHtcbiAgICBpID0gZyA9IGF0O1xuICB9IGVsc2Uge1xuICAgIG91dCA9IG5ldyBBcnJheShuZXdMZW4pO1xuXG4gICAgd2hpbGUgKGkgPCBhdCkge1xuICAgICAgb3V0W2crK10gPSBhcnJbaSsrXTtcbiAgICB9XG4gIH1cblxuICArK2k7XG5cbiAgd2hpbGUgKGkgPD0gbmV3TGVuKSB7XG4gICAgb3V0W2crK10gPSBhcnJbaSsrXTtcbiAgfVxuXG4gIGlmIChtdXRhdGUpIHtcbiAgICBvdXQubGVuZ3RoID0gbmV3TGVuO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAgICBJbnNlcnQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5LlxuXG4gICAgQHBhcmFtIG11dGF0ZSBTaG91bGQgdGhlIGlucHV0IGFycmF5IGJlIG11dGF0ZWQ/XG4gICAgQHBhcmFtIGF0IEluZGV4IHRvIGluc2VydCBhdC5cbiAgICBAcGFyYW0gdiBWYWx1ZSB0byBpbnNlcnQsXG4gICAgQHBhcmFtIGFyciBBcnJheS5cbiovXG5cblxudmFyIGFycmF5U3BsaWNlSW4gPSBmdW5jdGlvbiBhcnJheVNwbGljZUluKG11dGF0ZSwgYXQsIHYsIGFycikge1xuICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcblxuICBpZiAobXV0YXRlKSB7XG4gICAgdmFyIF9pID0gbGVuO1xuXG4gICAgd2hpbGUgKF9pID49IGF0KSB7XG4gICAgICBhcnJbX2ktLV0gPSBhcnJbX2ldO1xuICAgIH1cblxuICAgIGFyclthdF0gPSB2O1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICB2YXIgaSA9IDAsXG4gICAgICBnID0gMDtcbiAgdmFyIG91dCA9IG5ldyBBcnJheShsZW4gKyAxKTtcblxuICB3aGlsZSAoaSA8IGF0KSB7XG4gICAgb3V0W2crK10gPSBhcnJbaSsrXTtcbiAgfVxuXG4gIG91dFthdF0gPSB2O1xuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgb3V0WysrZ10gPSBhcnJbaSsrXTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuLyogTm9kZSBTdHJ1Y3R1cmVzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbnZhciBMRUFGID0gMTtcbnZhciBDT0xMSVNJT04gPSAyO1xudmFyIElOREVYID0gMztcbnZhciBBUlJBWSA9IDQ7XG4vKipcbiAgICBFbXB0eSBub2RlLlxuKi9cblxudmFyIGVtcHR5ID0ge1xuICBfX2hhbXRfaXNFbXB0eTogdHJ1ZVxufTtcblxudmFyIGlzRW1wdHlOb2RlID0gZnVuY3Rpb24gaXNFbXB0eU5vZGUoeCkge1xuICByZXR1cm4geCA9PT0gZW1wdHkgfHwgeCAmJiB4Ll9faGFtdF9pc0VtcHR5O1xufTtcbi8qKlxuICAgIExlYWYgaG9sZGluZyBhIHZhbHVlLlxuXG4gICAgQG1lbWJlciBlZGl0IEVkaXQgb2YgdGhlIG5vZGUuXG4gICAgQG1lbWJlciBoYXNoIEhhc2ggb2Yga2V5LlxuICAgIEBtZW1iZXIga2V5IEtleS5cbiAgICBAbWVtYmVyIHZhbHVlIFZhbHVlIHN0b3JlZC5cbiovXG5cblxudmFyIExlYWYgPSBmdW5jdGlvbiBMZWFmKGVkaXQsIGhhc2gsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBMRUFGLFxuICAgIGVkaXQ6IGVkaXQsXG4gICAgaGFzaDogaGFzaCxcbiAgICBrZXk6IGtleSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgX21vZGlmeTogTGVhZl9fbW9kaWZ5XG4gIH07XG59O1xuLyoqXG4gICAgTGVhZiBob2xkaW5nIG11bHRpcGxlIHZhbHVlcyB3aXRoIHRoZSBzYW1lIGhhc2ggYnV0IGRpZmZlcmVudCBrZXlzLlxuXG4gICAgQG1lbWJlciBlZGl0IEVkaXQgb2YgdGhlIG5vZGUuXG4gICAgQG1lbWJlciBoYXNoIEhhc2ggb2Yga2V5LlxuICAgIEBtZW1iZXIgY2hpbGRyZW4gQXJyYXkgb2YgY29sbGlzaW9uIGNoaWxkcmVuIG5vZGUuXG4qL1xuXG5cbnZhciBDb2xsaXNpb24gPSBmdW5jdGlvbiBDb2xsaXNpb24oZWRpdCwgaGFzaCwgY2hpbGRyZW4pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBDT0xMSVNJT04sXG4gICAgZWRpdDogZWRpdCxcbiAgICBoYXNoOiBoYXNoLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBfbW9kaWZ5OiBDb2xsaXNpb25fX21vZGlmeVxuICB9O1xufTtcbi8qKlxuICAgIEludGVybmFsIG5vZGUgd2l0aCBhIHNwYXJzZSBzZXQgb2YgY2hpbGRyZW4uXG5cbiAgICBVc2VzIGEgYml0bWFwIGFuZCBhcnJheSB0byBwYWNrIGNoaWxkcmVuLlxuXG4gIEBtZW1iZXIgZWRpdCBFZGl0IG9mIHRoZSBub2RlLlxuICAgIEBtZW1iZXIgbWFzayBCaXRtYXAgdGhhdCBlbmNvZGUgdGhlIHBvc2l0aW9ucyBvZiBjaGlsZHJlbiBpbiB0aGUgYXJyYXkuXG4gICAgQG1lbWJlciBjaGlsZHJlbiBBcnJheSBvZiBjaGlsZCBub2Rlcy5cbiovXG5cblxudmFyIEluZGV4ZWROb2RlID0gZnVuY3Rpb24gSW5kZXhlZE5vZGUoZWRpdCwgbWFzaywgY2hpbGRyZW4pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBJTkRFWCxcbiAgICBlZGl0OiBlZGl0LFxuICAgIG1hc2s6IG1hc2ssXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIF9tb2RpZnk6IEluZGV4ZWROb2RlX19tb2RpZnlcbiAgfTtcbn07XG4vKipcbiAgICBJbnRlcm5hbCBub2RlIHdpdGggbWFueSBjaGlsZHJlbi5cblxuICAgIEBtZW1iZXIgZWRpdCBFZGl0IG9mIHRoZSBub2RlLlxuICAgIEBtZW1iZXIgc2l6ZSBOdW1iZXIgb2YgY2hpbGRyZW4uXG4gICAgQG1lbWJlciBjaGlsZHJlbiBBcnJheSBvZiBjaGlsZCBub2Rlcy5cbiovXG5cblxudmFyIEFycmF5Tm9kZSA9IGZ1bmN0aW9uIEFycmF5Tm9kZShlZGl0LCBzaXplLCBjaGlsZHJlbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEFSUkFZLFxuICAgIGVkaXQ6IGVkaXQsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgX21vZGlmeTogQXJyYXlOb2RlX19tb2RpZnlcbiAgfTtcbn07XG4vKipcbiAgICBJcyBgbm9kZWAgYSBsZWFmIG5vZGU/XG4qL1xuXG5cbnZhciBpc0xlYWYgPSBmdW5jdGlvbiBpc0xlYWYobm9kZSkge1xuICByZXR1cm4gbm9kZSA9PT0gZW1wdHkgfHwgbm9kZS50eXBlID09PSBMRUFGIHx8IG5vZGUudHlwZSA9PT0gQ09MTElTSU9OO1xufTtcbi8qIEludGVybmFsIG5vZGUgb3BlcmF0aW9ucy5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIEV4cGFuZCBhbiBpbmRleGVkIG5vZGUgaW50byBhbiBhcnJheSBub2RlLlxuXG4gIEBwYXJhbSBlZGl0IEN1cnJlbnQgZWRpdC5cbiAgICBAcGFyYW0gZnJhZyBJbmRleCBvZiBhZGRlZCBjaGlsZC5cbiAgICBAcGFyYW0gY2hpbGQgQWRkZWQgY2hpbGQuXG4gICAgQHBhcmFtIG1hc2sgSW5kZXggbm9kZSBtYXNrIGJlZm9yZSBjaGlsZCBhZGRlZC5cbiAgICBAcGFyYW0gc3ViTm9kZXMgSW5kZXggbm9kZSBjaGlsZHJlbiBiZWZvcmUgY2hpbGQgYWRkZWQuXG4qL1xuXG5cbnZhciBleHBhbmQgPSBmdW5jdGlvbiBleHBhbmQoZWRpdCwgZnJhZywgY2hpbGQsIGJpdG1hcCwgc3ViTm9kZXMpIHtcbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgYml0ID0gYml0bWFwO1xuICB2YXIgY291bnQgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBiaXQ7ICsraSkge1xuICAgIGlmIChiaXQgJiAxKSBhcnJbaV0gPSBzdWJOb2Rlc1tjb3VudCsrXTtcbiAgICBiaXQgPj4+PSAxO1xuICB9XG5cbiAgYXJyW2ZyYWddID0gY2hpbGQ7XG4gIHJldHVybiBBcnJheU5vZGUoZWRpdCwgY291bnQgKyAxLCBhcnIpO1xufTtcbi8qKlxuICAgIENvbGxhcHNlIGFuIGFycmF5IG5vZGUgaW50byBhIGluZGV4ZWQgbm9kZS5cblxuICBAcGFyYW0gZWRpdCBDdXJyZW50IGVkaXQuXG4gICAgQHBhcmFtIGNvdW50IE51bWJlciBvZiBlbGVtZW50cyBpbiBuZXcgYXJyYXkuXG4gICAgQHBhcmFtIHJlbW92ZWQgSW5kZXggb2YgcmVtb3ZlZCBlbGVtZW50LlxuICAgIEBwYXJhbSBlbGVtZW50cyBBcnJheSBub2RlIGNoaWxkcmVuIGJlZm9yZSByZW1vdmUuXG4qL1xuXG5cbnZhciBwYWNrID0gZnVuY3Rpb24gcGFjayhlZGl0LCBjb3VudCwgcmVtb3ZlZCwgZWxlbWVudHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gbmV3IEFycmF5KGNvdW50IC0gMSk7XG4gIHZhciBnID0gMDtcbiAgdmFyIGJpdG1hcCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGkgIT09IHJlbW92ZWQpIHtcbiAgICAgIHZhciBlbGVtID0gZWxlbWVudHNbaV07XG5cbiAgICAgIGlmIChlbGVtICYmICFpc0VtcHR5Tm9kZShlbGVtKSkge1xuICAgICAgICBjaGlsZHJlbltnKytdID0gZWxlbTtcbiAgICAgICAgYml0bWFwIHw9IDEgPDwgaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXhlZE5vZGUoZWRpdCwgYml0bWFwLCBjaGlsZHJlbik7XG59O1xuLyoqXG4gICAgTWVyZ2UgdHdvIGxlYWYgbm9kZXMuXG5cbiAgICBAcGFyYW0gc2hpZnQgQ3VycmVudCBzaGlmdC5cbiAgICBAcGFyYW0gaDEgTm9kZSAxIGhhc2guXG4gICAgQHBhcmFtIG4xIE5vZGUgMS5cbiAgICBAcGFyYW0gaDIgTm9kZSAyIGhhc2guXG4gICAgQHBhcmFtIG4yIE5vZGUgMi5cbiovXG5cblxudmFyIG1lcmdlTGVhdmVzID0gZnVuY3Rpb24gbWVyZ2VMZWF2ZXMoZWRpdCwgc2hpZnQsIGgxLCBuMSwgaDIsIG4yKSB7XG4gIGlmIChoMSA9PT0gaDIpIHJldHVybiBDb2xsaXNpb24oZWRpdCwgaDEsIFtuMiwgbjFdKTtcbiAgdmFyIHN1YkgxID0gaGFzaEZyYWdtZW50KHNoaWZ0LCBoMSk7XG4gIHZhciBzdWJIMiA9IGhhc2hGcmFnbWVudChzaGlmdCwgaDIpO1xuICByZXR1cm4gSW5kZXhlZE5vZGUoZWRpdCwgdG9CaXRtYXAoc3ViSDEpIHwgdG9CaXRtYXAoc3ViSDIpLCBzdWJIMSA9PT0gc3ViSDIgPyBbbWVyZ2VMZWF2ZXMoZWRpdCwgc2hpZnQgKyBTSVpFLCBoMSwgbjEsIGgyLCBuMildIDogc3ViSDEgPCBzdWJIMiA/IFtuMSwgbjJdIDogW24yLCBuMV0pO1xufTtcbi8qKlxuICAgIFVwZGF0ZSBhbiBlbnRyeSBpbiBhIGNvbGxpc2lvbiBsaXN0LlxuXG4gICAgQHBhcmFtIG11dGF0ZSBTaG91bGQgbXV0YXRpb24gYmUgdXNlZD9cbiAgICBAcGFyYW0gZWRpdCBDdXJyZW50IGVkaXQuXG4gICAgQHBhcmFtIGtleUVxIEtleSBjb21wYXJlIGZ1bmN0aW9uLlxuICAgIEBwYXJhbSBoYXNoIEhhc2ggb2YgY29sbGlzaW9uLlxuICAgIEBwYXJhbSBsaXN0IENvbGxpc2lvbiBsaXN0LlxuICAgIEBwYXJhbSBmIFVwZGF0ZSBmdW5jdGlvbi5cbiAgICBAcGFyYW0gayBLZXkgdG8gdXBkYXRlLlxuICAgIEBwYXJhbSBzaXplIFNpemUgcmVmLlxuKi9cblxuXG52YXIgdXBkYXRlQ29sbGlzaW9uTGlzdCA9IGZ1bmN0aW9uIHVwZGF0ZUNvbGxpc2lvbkxpc3QobXV0YXRlLCBlZGl0LCBrZXlFcSwgaCwgbGlzdCwgZiwgaywgc2l6ZSkge1xuICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjaGlsZCA9IGxpc3RbaV07XG5cbiAgICBpZiAoa2V5RXEoaywgY2hpbGQua2V5KSkge1xuICAgICAgdmFyIHZhbHVlID0gY2hpbGQudmFsdWU7XG5cbiAgICAgIHZhciBfbmV3VmFsdWUgPSBmKHZhbHVlKTtcblxuICAgICAgaWYgKF9uZXdWYWx1ZSA9PT0gdmFsdWUpIHJldHVybiBsaXN0O1xuXG4gICAgICBpZiAoX25ld1ZhbHVlID09PSBub3RoaW5nKSB7XG4gICAgICAgIC0tc2l6ZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFycmF5U3BsaWNlT3V0KG11dGF0ZSwgaSwgbGlzdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheVVwZGF0ZShtdXRhdGUsIGksIExlYWYoZWRpdCwgaCwgaywgX25ld1ZhbHVlKSwgbGlzdCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1ZhbHVlID0gZigpO1xuICBpZiAobmV3VmFsdWUgPT09IG5vdGhpbmcpIHJldHVybiBsaXN0O1xuICArK3NpemUudmFsdWU7XG4gIHJldHVybiBhcnJheVVwZGF0ZShtdXRhdGUsIGxlbiwgTGVhZihlZGl0LCBoLCBrLCBuZXdWYWx1ZSksIGxpc3QpO1xufTtcblxudmFyIGNhbkVkaXROb2RlID0gZnVuY3Rpb24gY2FuRWRpdE5vZGUoZWRpdCwgbm9kZSkge1xuICByZXR1cm4gZWRpdCA9PT0gbm9kZS5lZGl0O1xufTtcbi8qIEVkaXRpbmdcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxudmFyIExlYWZfX21vZGlmeSA9IGZ1bmN0aW9uIExlYWZfX21vZGlmeShlZGl0LCBrZXlFcSwgc2hpZnQsIGYsIGgsIGssIHNpemUpIHtcbiAgaWYgKGtleUVxKGssIHRoaXMua2V5KSkge1xuICAgIHZhciBfdiA9IGYodGhpcy52YWx1ZSk7XG5cbiAgICBpZiAoX3YgPT09IHRoaXMudmFsdWUpIHJldHVybiB0aGlzO2Vsc2UgaWYgKF92ID09PSBub3RoaW5nKSB7XG4gICAgICAtLXNpemUudmFsdWU7XG4gICAgICByZXR1cm4gZW1wdHk7XG4gICAgfVxuXG4gICAgaWYgKGNhbkVkaXROb2RlKGVkaXQsIHRoaXMpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gX3Y7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gTGVhZihlZGl0LCBoLCBrLCBfdik7XG4gIH1cblxuICB2YXIgdiA9IGYoKTtcbiAgaWYgKHYgPT09IG5vdGhpbmcpIHJldHVybiB0aGlzO1xuICArK3NpemUudmFsdWU7XG4gIHJldHVybiBtZXJnZUxlYXZlcyhlZGl0LCBzaGlmdCwgdGhpcy5oYXNoLCB0aGlzLCBoLCBMZWFmKGVkaXQsIGgsIGssIHYpKTtcbn07XG5cbnZhciBDb2xsaXNpb25fX21vZGlmeSA9IGZ1bmN0aW9uIENvbGxpc2lvbl9fbW9kaWZ5KGVkaXQsIGtleUVxLCBzaGlmdCwgZiwgaCwgaywgc2l6ZSkge1xuICBpZiAoaCA9PT0gdGhpcy5oYXNoKSB7XG4gICAgdmFyIGNhbkVkaXQgPSBjYW5FZGl0Tm9kZShlZGl0LCB0aGlzKTtcbiAgICB2YXIgbGlzdCA9IHVwZGF0ZUNvbGxpc2lvbkxpc3QoY2FuRWRpdCwgZWRpdCwga2V5RXEsIHRoaXMuaGFzaCwgdGhpcy5jaGlsZHJlbiwgZiwgaywgc2l6ZSk7XG4gICAgaWYgKGxpc3QgPT09IHRoaXMuY2hpbGRyZW4pIHJldHVybiB0aGlzO1xuICAgIHJldHVybiBsaXN0Lmxlbmd0aCA+IDEgPyBDb2xsaXNpb24oZWRpdCwgdGhpcy5oYXNoLCBsaXN0KSA6IGxpc3RbMF07IC8vIGNvbGxhcHNlIHNpbmdsZSBlbGVtZW50IGNvbGxpc2lvbiBsaXN0XG4gIH1cblxuICB2YXIgdiA9IGYoKTtcbiAgaWYgKHYgPT09IG5vdGhpbmcpIHJldHVybiB0aGlzO1xuICArK3NpemUudmFsdWU7XG4gIHJldHVybiBtZXJnZUxlYXZlcyhlZGl0LCBzaGlmdCwgdGhpcy5oYXNoLCB0aGlzLCBoLCBMZWFmKGVkaXQsIGgsIGssIHYpKTtcbn07XG5cbnZhciBJbmRleGVkTm9kZV9fbW9kaWZ5ID0gZnVuY3Rpb24gSW5kZXhlZE5vZGVfX21vZGlmeShlZGl0LCBrZXlFcSwgc2hpZnQsIGYsIGgsIGssIHNpemUpIHtcbiAgdmFyIG1hc2sgPSB0aGlzLm1hc2s7XG4gIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gIHZhciBmcmFnID0gaGFzaEZyYWdtZW50KHNoaWZ0LCBoKTtcbiAgdmFyIGJpdCA9IHRvQml0bWFwKGZyYWcpO1xuICB2YXIgaW5keCA9IGZyb21CaXRtYXAobWFzaywgYml0KTtcbiAgdmFyIGV4aXN0cyA9IG1hc2sgJiBiaXQ7XG4gIHZhciBjdXJyZW50ID0gZXhpc3RzID8gY2hpbGRyZW5baW5keF0gOiBlbXB0eTtcblxuICB2YXIgY2hpbGQgPSBjdXJyZW50Ll9tb2RpZnkoZWRpdCwga2V5RXEsIHNoaWZ0ICsgU0laRSwgZiwgaCwgaywgc2l6ZSk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IGNoaWxkKSByZXR1cm4gdGhpcztcbiAgdmFyIGNhbkVkaXQgPSBjYW5FZGl0Tm9kZShlZGl0LCB0aGlzKTtcbiAgdmFyIGJpdG1hcCA9IG1hc2s7XG4gIHZhciBuZXdDaGlsZHJlbiA9IHZvaWQgMDtcblxuICBpZiAoZXhpc3RzICYmIGlzRW1wdHlOb2RlKGNoaWxkKSkge1xuICAgIC8vIHJlbW92ZVxuICAgIGJpdG1hcCAmPSB+Yml0O1xuICAgIGlmICghYml0bWFwKSByZXR1cm4gZW1wdHk7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA8PSAyICYmIGlzTGVhZihjaGlsZHJlbltpbmR4IF4gMV0pKSByZXR1cm4gY2hpbGRyZW5baW5keCBeIDFdOyAvLyBjb2xsYXBzZVxuXG4gICAgbmV3Q2hpbGRyZW4gPSBhcnJheVNwbGljZU91dChjYW5FZGl0LCBpbmR4LCBjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAoIWV4aXN0cyAmJiAhaXNFbXB0eU5vZGUoY2hpbGQpKSB7XG4gICAgLy8gYWRkXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+PSBNQVhfSU5ERVhfTk9ERSkgcmV0dXJuIGV4cGFuZChlZGl0LCBmcmFnLCBjaGlsZCwgbWFzaywgY2hpbGRyZW4pO1xuICAgIGJpdG1hcCB8PSBiaXQ7XG4gICAgbmV3Q2hpbGRyZW4gPSBhcnJheVNwbGljZUluKGNhbkVkaXQsIGluZHgsIGNoaWxkLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbW9kaWZ5XG4gICAgbmV3Q2hpbGRyZW4gPSBhcnJheVVwZGF0ZShjYW5FZGl0LCBpbmR4LCBjaGlsZCwgY2hpbGRyZW4pO1xuICB9XG5cbiAgaWYgKGNhbkVkaXQpIHtcbiAgICB0aGlzLm1hc2sgPSBiaXRtYXA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4ZWROb2RlKGVkaXQsIGJpdG1hcCwgbmV3Q2hpbGRyZW4pO1xufTtcblxudmFyIEFycmF5Tm9kZV9fbW9kaWZ5ID0gZnVuY3Rpb24gQXJyYXlOb2RlX19tb2RpZnkoZWRpdCwga2V5RXEsIHNoaWZ0LCBmLCBoLCBrLCBzaXplKSB7XG4gIHZhciBjb3VudCA9IHRoaXMuc2l6ZTtcbiAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgdmFyIGZyYWcgPSBoYXNoRnJhZ21lbnQoc2hpZnQsIGgpO1xuICB2YXIgY2hpbGQgPSBjaGlsZHJlbltmcmFnXTtcblxuICB2YXIgbmV3Q2hpbGQgPSAoY2hpbGQgfHwgZW1wdHkpLl9tb2RpZnkoZWRpdCwga2V5RXEsIHNoaWZ0ICsgU0laRSwgZiwgaCwgaywgc2l6ZSk7XG5cbiAgaWYgKGNoaWxkID09PSBuZXdDaGlsZCkgcmV0dXJuIHRoaXM7XG4gIHZhciBjYW5FZGl0ID0gY2FuRWRpdE5vZGUoZWRpdCwgdGhpcyk7XG4gIHZhciBuZXdDaGlsZHJlbiA9IHZvaWQgMDtcblxuICBpZiAoaXNFbXB0eU5vZGUoY2hpbGQpICYmICFpc0VtcHR5Tm9kZShuZXdDaGlsZCkpIHtcbiAgICAvLyBhZGRcbiAgICArK2NvdW50O1xuICAgIG5ld0NoaWxkcmVuID0gYXJyYXlVcGRhdGUoY2FuRWRpdCwgZnJhZywgbmV3Q2hpbGQsIGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmICghaXNFbXB0eU5vZGUoY2hpbGQpICYmIGlzRW1wdHlOb2RlKG5ld0NoaWxkKSkge1xuICAgIC8vIHJlbW92ZVxuICAgIC0tY291bnQ7XG4gICAgaWYgKGNvdW50IDw9IE1JTl9BUlJBWV9OT0RFKSByZXR1cm4gcGFjayhlZGl0LCBjb3VudCwgZnJhZywgY2hpbGRyZW4pO1xuICAgIG5ld0NoaWxkcmVuID0gYXJyYXlVcGRhdGUoY2FuRWRpdCwgZnJhZywgZW1wdHksIGNoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtb2RpZnlcbiAgICBuZXdDaGlsZHJlbiA9IGFycmF5VXBkYXRlKGNhbkVkaXQsIGZyYWcsIG5ld0NoaWxkLCBjaGlsZHJlbik7XG4gIH1cblxuICBpZiAoY2FuRWRpdCkge1xuICAgIHRoaXMuc2l6ZSA9IGNvdW50O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiBBcnJheU5vZGUoZWRpdCwgY291bnQsIG5ld0NoaWxkcmVuKTtcbn07XG5cbmVtcHR5Ll9tb2RpZnkgPSBmdW5jdGlvbiAoZWRpdCwga2V5RXEsIHNoaWZ0LCBmLCBoLCBrLCBzaXplKSB7XG4gIHZhciB2ID0gZigpO1xuICBpZiAodiA9PT0gbm90aGluZykgcmV0dXJuIGVtcHR5O1xuICArK3NpemUudmFsdWU7XG4gIHJldHVybiBMZWFmKGVkaXQsIGgsIGssIHYpO1xufTtcbi8qXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbmZ1bmN0aW9uIE1hcChlZGl0YWJsZSwgZWRpdCwgY29uZmlnLCByb290LCBzaXplKSB7XG4gIHRoaXMuX2VkaXRhYmxlID0gZWRpdGFibGU7XG4gIHRoaXMuX2VkaXQgPSBlZGl0O1xuICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIHRoaXMuX3Jvb3QgPSByb290O1xuICB0aGlzLl9zaXplID0gc2l6ZTtcbn1cblxuTWFwLnByb3RvdHlwZS5zZXRUcmVlID0gZnVuY3Rpb24gKG5ld1Jvb3QsIG5ld1NpemUpIHtcbiAgaWYgKHRoaXMuX2VkaXRhYmxlKSB7XG4gICAgdGhpcy5fcm9vdCA9IG5ld1Jvb3Q7XG4gICAgdGhpcy5fc2l6ZSA9IG5ld1NpemU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXR1cm4gbmV3Um9vdCA9PT0gdGhpcy5fcm9vdCA/IHRoaXMgOiBuZXcgTWFwKHRoaXMuX2VkaXRhYmxlLCB0aGlzLl9lZGl0LCB0aGlzLl9jb25maWcsIG5ld1Jvb3QsIG5ld1NpemUpO1xufTtcbi8qIFF1ZXJpZXNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIExvb2t1cCB0aGUgdmFsdWUgZm9yIGBrZXlgIGluIGBtYXBgIHVzaW5nIGEgY3VzdG9tIGBoYXNoYC5cblxuICAgIFJldHVybnMgdGhlIHZhbHVlIG9yIGBhbHRgIGlmIG5vbmUuXG4qL1xuXG5cbnZhciB0cnlHZXRIYXNoID0gaGFtdC50cnlHZXRIYXNoID0gZnVuY3Rpb24gKGFsdCwgaGFzaCwga2V5LCBtYXApIHtcbiAgdmFyIG5vZGUgPSBtYXAuX3Jvb3Q7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBrZXlFcSA9IG1hcC5fY29uZmlnLmtleUVxO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgTEVBRjpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBrZXlFcShrZXksIG5vZGUua2V5KSA/IG5vZGUudmFsdWUgOiBhbHQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDT0xMSVNJT046XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoaGFzaCA9PT0gbm9kZS5oYXNoKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgIGlmIChrZXlFcShrZXksIGNoaWxkLmtleSkpIHJldHVybiBjaGlsZC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSU5ERVg6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZnJhZyA9IGhhc2hGcmFnbWVudChzaGlmdCwgaGFzaCk7XG4gICAgICAgICAgdmFyIGJpdCA9IHRvQml0bWFwKGZyYWcpO1xuXG4gICAgICAgICAgaWYgKG5vZGUubWFzayAmIGJpdCkge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bZnJvbUJpdG1hcChub2RlLm1hc2ssIGJpdCldO1xuICAgICAgICAgICAgc2hpZnQgKz0gU0laRTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBBUlJBWTpcbiAgICAgICAge1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkcmVuW2hhc2hGcmFnbWVudChzaGlmdCwgaGFzaCldO1xuXG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHNoaWZ0ICs9IFNJWkU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfVxuICB9XG59O1xuXG5NYXAucHJvdG90eXBlLnRyeUdldEhhc2ggPSBmdW5jdGlvbiAoYWx0LCBoYXNoLCBrZXkpIHtcbiAgcmV0dXJuIHRyeUdldEhhc2goYWx0LCBoYXNoLCBrZXksIHRoaXMpO1xufTtcbi8qKlxuICAgIExvb2t1cCB0aGUgdmFsdWUgZm9yIGBrZXlgIGluIGBtYXBgIHVzaW5nIGludGVybmFsIGhhc2ggZnVuY3Rpb24uXG5cbiAgICBAc2VlIGB0cnlHZXRIYXNoYFxuKi9cblxuXG52YXIgdHJ5R2V0ID0gaGFtdC50cnlHZXQgPSBmdW5jdGlvbiAoYWx0LCBrZXksIG1hcCkge1xuICByZXR1cm4gdHJ5R2V0SGFzaChhbHQsIG1hcC5fY29uZmlnLmhhc2goa2V5KSwga2V5LCBtYXApO1xufTtcblxuTWFwLnByb3RvdHlwZS50cnlHZXQgPSBmdW5jdGlvbiAoYWx0LCBrZXkpIHtcbiAgcmV0dXJuIHRyeUdldChhbHQsIGtleSwgdGhpcyk7XG59O1xuLyoqXG4gICAgTG9va3VwIHRoZSB2YWx1ZSBmb3IgYGtleWAgaW4gYG1hcGAgdXNpbmcgYSBjdXN0b20gYGhhc2hgLlxuXG4gICAgUmV0dXJucyB0aGUgdmFsdWUgb3IgYHVuZGVmaW5lZGAgaWYgbm9uZS5cbiovXG5cblxudmFyIGdldEhhc2ggPSBoYW10LmdldEhhc2ggPSBmdW5jdGlvbiAoaGFzaCwga2V5LCBtYXApIHtcbiAgcmV0dXJuIHRyeUdldEhhc2godW5kZWZpbmVkLCBoYXNoLCBrZXksIG1hcCk7XG59O1xuXG5NYXAucHJvdG90eXBlLmdldEhhc2ggPSBmdW5jdGlvbiAoaGFzaCwga2V5KSB7XG4gIHJldHVybiBnZXRIYXNoKGhhc2gsIGtleSwgdGhpcyk7XG59O1xuLyoqXG4gICAgTG9va3VwIHRoZSB2YWx1ZSBmb3IgYGtleWAgaW4gYG1hcGAgdXNpbmcgaW50ZXJuYWwgaGFzaCBmdW5jdGlvbi5cblxuICAgIEBzZWUgYGdldGBcbiovXG5cblxudmFyIGdldCA9IGhhbXQuZ2V0ID0gZnVuY3Rpb24gKGtleSwgbWFwKSB7XG4gIHJldHVybiB0cnlHZXRIYXNoKHVuZGVmaW5lZCwgbWFwLl9jb25maWcuaGFzaChrZXkpLCBrZXksIG1hcCk7XG59O1xuXG5NYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGFsdCkge1xuICByZXR1cm4gdHJ5R2V0KGFsdCwga2V5LCB0aGlzKTtcbn07XG4vKipcbiAgICBEb2VzIGFuIGVudHJ5IGV4aXN0IGZvciBga2V5YCBpbiBgbWFwYD8gVXNlcyBjdXN0b20gYGhhc2hgLlxuKi9cblxuXG52YXIgaGFzSGFzaCA9IGhhbXQuaGFzID0gZnVuY3Rpb24gKGhhc2gsIGtleSwgbWFwKSB7XG4gIHJldHVybiB0cnlHZXRIYXNoKG5vdGhpbmcsIGhhc2gsIGtleSwgbWFwKSAhPT0gbm90aGluZztcbn07XG5cbk1hcC5wcm90b3R5cGUuaGFzSGFzaCA9IGZ1bmN0aW9uIChoYXNoLCBrZXkpIHtcbiAgcmV0dXJuIGhhc0hhc2goaGFzaCwga2V5LCB0aGlzKTtcbn07XG4vKipcbiAgICBEb2VzIGFuIGVudHJ5IGV4aXN0IGZvciBga2V5YCBpbiBgbWFwYD8gVXNlcyBpbnRlcm5hbCBoYXNoIGZ1bmN0aW9uLlxuKi9cblxuXG52YXIgaGFzID0gaGFtdC5oYXMgPSBmdW5jdGlvbiAoa2V5LCBtYXApIHtcbiAgcmV0dXJuIGhhc0hhc2gobWFwLl9jb25maWcuaGFzaChrZXkpLCBrZXksIG1hcCk7XG59O1xuXG5NYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGhhcyhrZXksIHRoaXMpO1xufTtcblxudmFyIGRlZktleUNvbXBhcmUgPSBmdW5jdGlvbiBkZWZLZXlDb21wYXJlKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHk7XG59O1xuLyoqXG4gICAgQ3JlYXRlIGFuIGVtcHR5IG1hcC5cblxuICAgIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbi5cbiovXG5cblxuaGFtdC5tYWtlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IE1hcCgwLCAwLCB7XG4gICAga2V5RXE6IGNvbmZpZyAmJiBjb25maWcua2V5RXEgfHwgZGVmS2V5Q29tcGFyZSxcbiAgICBoYXNoOiBjb25maWcgJiYgY29uZmlnLmhhc2ggfHwgaGFzaFxuICB9LCBlbXB0eSwgMCk7XG59O1xuLyoqXG4gICAgRW1wdHkgbWFwLlxuKi9cblxuXG5oYW10LmVtcHR5ID0gaGFtdC5tYWtlKCk7XG4vKipcbiAgICBEb2VzIGBtYXBgIGNvbnRhaW4gYW55IGVsZW1lbnRzP1xuKi9cblxudmFyIGlzRW1wdHkgPSBoYW10LmlzRW1wdHkgPSBmdW5jdGlvbiAobWFwKSB7XG4gIHJldHVybiBtYXAgJiYgISFpc0VtcHR5Tm9kZShtYXAuX3Jvb3QpO1xufTtcblxuTWFwLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFbXB0eSh0aGlzKTtcbn07XG4vKiBVcGRhdGVzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAgICBBbHRlciB0aGUgdmFsdWUgc3RvcmVkIGZvciBga2V5YCBpbiBgbWFwYCB1c2luZyBmdW5jdGlvbiBgZmAgdXNpbmdcbiAgICBjdXN0b20gaGFzaC5cblxuICAgIGBmYCBpcyBpbnZva2VkIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGBrYCBpZiBpdCBleGlzdHMsXG4gICAgb3Igbm8gYXJndW1lbnRzIGlmIG5vIHN1Y2ggdmFsdWUgZXhpc3RzLiBgbW9kaWZ5YCB3aWxsIGFsd2F5cyBlaXRoZXJcbiAgICB1cGRhdGUgb3IgaW5zZXJ0IGEgdmFsdWUgaW50byB0aGUgbWFwLlxuXG4gICAgUmV0dXJucyBhIG1hcCB3aXRoIHRoZSBtb2RpZmllZCB2YWx1ZS4gRG9lcyBub3QgYWx0ZXIgYG1hcGAuXG4qL1xuXG5cbnZhciBtb2RpZnlIYXNoID0gaGFtdC5tb2RpZnlIYXNoID0gZnVuY3Rpb24gKGYsIGhhc2gsIGtleSwgbWFwKSB7XG4gIHZhciBzaXplID0ge1xuICAgIHZhbHVlOiBtYXAuX3NpemVcbiAgfTtcblxuICB2YXIgbmV3Um9vdCA9IG1hcC5fcm9vdC5fbW9kaWZ5KG1hcC5fZWRpdGFibGUgPyBtYXAuX2VkaXQgOiBOYU4sIG1hcC5fY29uZmlnLmtleUVxLCAwLCBmLCBoYXNoLCBrZXksIHNpemUpO1xuXG4gIHJldHVybiBtYXAuc2V0VHJlZShuZXdSb290LCBzaXplLnZhbHVlKTtcbn07XG5cbk1hcC5wcm90b3R5cGUubW9kaWZ5SGFzaCA9IGZ1bmN0aW9uIChoYXNoLCBrZXksIGYpIHtcbiAgcmV0dXJuIG1vZGlmeUhhc2goZiwgaGFzaCwga2V5LCB0aGlzKTtcbn07XG4vKipcbiAgICBBbHRlciB0aGUgdmFsdWUgc3RvcmVkIGZvciBga2V5YCBpbiBgbWFwYCB1c2luZyBmdW5jdGlvbiBgZmAgdXNpbmdcbiAgICBpbnRlcm5hbCBoYXNoIGZ1bmN0aW9uLlxuXG4gICAgQHNlZSBgbW9kaWZ5SGFzaGBcbiovXG5cblxudmFyIG1vZGlmeSA9IGhhbXQubW9kaWZ5ID0gZnVuY3Rpb24gKGYsIGtleSwgbWFwKSB7XG4gIHJldHVybiBtb2RpZnlIYXNoKGYsIG1hcC5fY29uZmlnLmhhc2goa2V5KSwga2V5LCBtYXApO1xufTtcblxuTWFwLnByb3RvdHlwZS5tb2RpZnkgPSBmdW5jdGlvbiAoa2V5LCBmKSB7XG4gIHJldHVybiBtb2RpZnkoZiwga2V5LCB0aGlzKTtcbn07XG4vKipcbiAgICBTdG9yZSBgdmFsdWVgIGZvciBga2V5YCBpbiBgbWFwYCB1c2luZyBjdXN0b20gYGhhc2hgLlxuXG4gICAgUmV0dXJucyBhIG1hcCB3aXRoIHRoZSBtb2RpZmllZCB2YWx1ZS4gRG9lcyBub3QgYWx0ZXIgYG1hcGAuXG4qL1xuXG5cbnZhciBzZXRIYXNoID0gaGFtdC5zZXRIYXNoID0gZnVuY3Rpb24gKGhhc2gsIGtleSwgdmFsdWUsIG1hcCkge1xuICByZXR1cm4gbW9kaWZ5SGFzaChjb25zdGFudCh2YWx1ZSksIGhhc2gsIGtleSwgbWFwKTtcbn07XG5cbk1hcC5wcm90b3R5cGUuc2V0SGFzaCA9IGZ1bmN0aW9uIChoYXNoLCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzZXRIYXNoKGhhc2gsIGtleSwgdmFsdWUsIHRoaXMpO1xufTtcbi8qKlxuICAgIFN0b3JlIGB2YWx1ZWAgZm9yIGBrZXlgIGluIGBtYXBgIHVzaW5nIGludGVybmFsIGhhc2ggZnVuY3Rpb24uXG5cbiAgICBAc2VlIGBzZXRIYXNoYFxuKi9cblxuXG52YXIgc2V0ID0gaGFtdC5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgbWFwKSB7XG4gIHJldHVybiBzZXRIYXNoKG1hcC5fY29uZmlnLmhhc2goa2V5KSwga2V5LCB2YWx1ZSwgbWFwKTtcbn07XG5cbk1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHNldChrZXksIHZhbHVlLCB0aGlzKTtcbn07XG4vKipcbiAgICBSZW1vdmUgdGhlIGVudHJ5IGZvciBga2V5YCBpbiBgbWFwYC5cblxuICAgIFJldHVybnMgYSBtYXAgd2l0aCB0aGUgdmFsdWUgcmVtb3ZlZC4gRG9lcyBub3QgYWx0ZXIgYG1hcGAuXG4qL1xuXG5cbnZhciBkZWwgPSBjb25zdGFudChub3RoaW5nKTtcblxudmFyIHJlbW92ZUhhc2ggPSBoYW10LnJlbW92ZUhhc2ggPSBmdW5jdGlvbiAoaGFzaCwga2V5LCBtYXApIHtcbiAgcmV0dXJuIG1vZGlmeUhhc2goZGVsLCBoYXNoLCBrZXksIG1hcCk7XG59O1xuXG5NYXAucHJvdG90eXBlLnJlbW92ZUhhc2ggPSBNYXAucHJvdG90eXBlLmRlbGV0ZUhhc2ggPSBmdW5jdGlvbiAoaGFzaCwga2V5KSB7XG4gIHJldHVybiByZW1vdmVIYXNoKGhhc2gsIGtleSwgdGhpcyk7XG59O1xuLyoqXG4gICAgUmVtb3ZlIHRoZSBlbnRyeSBmb3IgYGtleWAgaW4gYG1hcGAgdXNpbmcgaW50ZXJuYWwgaGFzaCBmdW5jdGlvbi5cblxuICAgIEBzZWUgYHJlbW92ZUhhc2hgXG4qL1xuXG5cbnZhciByZW1vdmUgPSBoYW10LnJlbW92ZSA9IGZ1bmN0aW9uIChrZXksIG1hcCkge1xuICByZXR1cm4gcmVtb3ZlSGFzaChtYXAuX2NvbmZpZy5oYXNoKGtleSksIGtleSwgbWFwKTtcbn07XG5cbk1hcC5wcm90b3R5cGUucmVtb3ZlID0gTWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiByZW1vdmUoa2V5LCB0aGlzKTtcbn07XG4vKiBNdXRhdGlvblxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gICAgTWFyayBgbWFwYCBhcyBtdXRhYmxlLlxuICovXG5cblxudmFyIGJlZ2luTXV0YXRpb24gPSBoYW10LmJlZ2luTXV0YXRpb24gPSBmdW5jdGlvbiAobWFwKSB7XG4gIHJldHVybiBuZXcgTWFwKG1hcC5fZWRpdGFibGUgKyAxLCBtYXAuX2VkaXQgKyAxLCBtYXAuX2NvbmZpZywgbWFwLl9yb290LCBtYXAuX3NpemUpO1xufTtcblxuTWFwLnByb3RvdHlwZS5iZWdpbk11dGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYmVnaW5NdXRhdGlvbih0aGlzKTtcbn07XG4vKipcbiAgICBNYXJrIGBtYXBgIGFzIGltbXV0YWJsZS5cbiAqL1xuXG5cbnZhciBlbmRNdXRhdGlvbiA9IGhhbXQuZW5kTXV0YXRpb24gPSBmdW5jdGlvbiAobWFwKSB7XG4gIG1hcC5fZWRpdGFibGUgPSBtYXAuX2VkaXRhYmxlICYmIG1hcC5fZWRpdGFibGUgLSAxO1xuICByZXR1cm4gbWFwO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbmRNdXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGVuZE11dGF0aW9uKHRoaXMpO1xufTtcbi8qKlxuICAgIE11dGF0ZSBgbWFwYCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGZgLlxuICAgIEBwYXJhbSBmXG4gICAgQHBhcmFtIG1hcCBIQU1UXG4qL1xuXG5cbnZhciBtdXRhdGUgPSBoYW10Lm11dGF0ZSA9IGZ1bmN0aW9uIChmLCBtYXApIHtcbiAgdmFyIHRyYW5zaWVudCA9IGJlZ2luTXV0YXRpb24obWFwKTtcbiAgZih0cmFuc2llbnQpO1xuICByZXR1cm4gZW5kTXV0YXRpb24odHJhbnNpZW50KTtcbn07XG5cbk1hcC5wcm90b3R5cGUubXV0YXRlID0gZnVuY3Rpb24gKGYpIHtcbiAgcmV0dXJuIG11dGF0ZShmLCB0aGlzKTtcbn07XG4vKiBUcmF2ZXJzYWxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIEFwcGx5IGEgY29udGludWF0aW9uLlxuKi9cblxuXG52YXIgYXBwayA9IGZ1bmN0aW9uIGFwcGsoaykge1xuICByZXR1cm4gayAmJiBsYXp5VmlzaXRDaGlsZHJlbihrWzBdLCBrWzFdLCBrWzJdLCBrWzNdLCBrWzRdKTtcbn07XG4vKipcbiAgICBSZWN1cnNpdmVseSB2aXNpdCBhbGwgdmFsdWVzIHN0b3JlZCBpbiBhbiBhcnJheSBvZiBub2RlcyBsYXppbHkuXG4qL1xuXG5cbnZhciBsYXp5VmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uIGxhenlWaXNpdENoaWxkcmVuKGxlbiwgY2hpbGRyZW4sIGksIGYsIGspIHtcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpKytdO1xuICAgIGlmIChjaGlsZCAmJiAhaXNFbXB0eU5vZGUoY2hpbGQpKSByZXR1cm4gbGF6eVZpc2l0KGNoaWxkLCBmLCBbbGVuLCBjaGlsZHJlbiwgaSwgZiwga10pO1xuICB9XG5cbiAgcmV0dXJuIGFwcGsoayk7XG59O1xuLyoqXG4gICAgUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHZhbHVlcyBzdG9yZWQgaW4gYG5vZGVgIGxhemlseS5cbiovXG5cblxudmFyIGxhenlWaXNpdCA9IGZ1bmN0aW9uIGxhenlWaXNpdChub2RlLCBmLCBrKSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBMRUFGOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGYobm9kZSksXG4gICAgICAgIHJlc3Q6IGtcbiAgICAgIH07XG5cbiAgICBjYXNlIENPTExJU0lPTjpcbiAgICBjYXNlIEFSUkFZOlxuICAgIGNhc2UgSU5ERVg6XG4gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgcmV0dXJuIGxhenlWaXNpdENoaWxkcmVuKGNoaWxkcmVuLmxlbmd0aCwgY2hpbGRyZW4sIDAsIGYsIGspO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhcHBrKGspO1xuICB9XG59O1xuXG52YXIgRE9ORSA9IHtcbiAgZG9uZTogdHJ1ZVxufTtcbi8qKlxuICAgIEphdmFzY3JpcHQgaXRlcmF0b3Igb3ZlciBhIG1hcC5cbiovXG5cbmZ1bmN0aW9uIE1hcEl0ZXJhdG9yKHYpIHtcbiAgdGhpcy52ID0gdjtcbn1cblxuTWFwSXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy52KSByZXR1cm4gRE9ORTtcbiAgdmFyIHYwID0gdGhpcy52O1xuICB0aGlzLnYgPSBhcHBrKHYwLnJlc3QpO1xuICByZXR1cm4gdjA7XG59O1xuXG5NYXBJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuLyoqXG4gICAgTGF6aWx5IHZpc2l0IGVhY2ggdmFsdWUgaW4gbWFwIHdpdGggZnVuY3Rpb24gYGZgLlxuKi9cblxuXG52YXIgdmlzaXQgPSBmdW5jdGlvbiB2aXNpdChtYXAsIGYpIHtcbiAgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcihsYXp5VmlzaXQobWFwLl9yb290LCBmKSk7XG59O1xuLyoqXG4gICAgR2V0IGEgSmF2YXNjc3JpcHQgaXRlcmF0b3Igb2YgYG1hcGAuXG5cbiAgICBJdGVyYXRlcyBvdmVyIGBba2V5LCB2YWx1ZV1gIGFycmF5cy5cbiovXG5cblxudmFyIGJ1aWxkUGFpcnMgPSBmdW5jdGlvbiBidWlsZFBhaXJzKHgpIHtcbiAgcmV0dXJuIFt4LmtleSwgeC52YWx1ZV07XG59O1xuXG52YXIgZW50cmllcyA9IGhhbXQuZW50cmllcyA9IGZ1bmN0aW9uIChtYXApIHtcbiAgcmV0dXJuIHZpc2l0KG1hcCwgYnVpbGRQYWlycyk7XG59O1xuXG5NYXAucHJvdG90eXBlLmVudHJpZXMgPSBNYXAucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBlbnRyaWVzKHRoaXMpO1xufTtcbi8qKlxuICAgIEdldCBhcnJheSBvZiBhbGwga2V5cyBpbiBgbWFwYC5cblxuICAgIE9yZGVyIGlzIG5vdCBndWFyYW50ZWVkLlxuKi9cblxuXG52YXIgYnVpbGRLZXlzID0gZnVuY3Rpb24gYnVpbGRLZXlzKHgpIHtcbiAgcmV0dXJuIHgua2V5O1xufTtcblxudmFyIGtleXMgPSBoYW10LmtleXMgPSBmdW5jdGlvbiAobWFwKSB7XG4gIHJldHVybiB2aXNpdChtYXAsIGJ1aWxkS2V5cyk7XG59O1xuXG5NYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBrZXlzKHRoaXMpO1xufTtcbi8qKlxuICAgIEdldCBhcnJheSBvZiBhbGwgdmFsdWVzIGluIGBtYXBgLlxuXG4gICAgT3JkZXIgaXMgbm90IGd1YXJhbnRlZWQsIGR1cGxpY2F0ZXMgYXJlIHByZXNlcnZlZC5cbiovXG5cblxudmFyIGJ1aWxkVmFsdWVzID0gZnVuY3Rpb24gYnVpbGRWYWx1ZXMoeCkge1xuICByZXR1cm4geC52YWx1ZTtcbn07XG5cbnZhciB2YWx1ZXMgPSBoYW10LnZhbHVlcyA9IE1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKG1hcCkge1xuICByZXR1cm4gdmlzaXQobWFwLCBidWlsZFZhbHVlcyk7XG59O1xuXG5NYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHZhbHVlcyh0aGlzKTtcbn07XG4vKiBGb2xkXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAgICBWaXNpdCBldmVyeSBlbnRyeSBpbiB0aGUgbWFwLCBhZ2dyZWdhdGluZyBkYXRhLlxuXG4gICAgT3JkZXIgb2Ygbm9kZXMgaXMgbm90IGd1YXJhbnRlZWQuXG5cbiAgICBAcGFyYW0gZiBGdW5jdGlvbiBtYXBwaW5nIGFjY3VtdWxhdGVkIHZhbHVlLCB2YWx1ZSwgYW5kIGtleSB0byBuZXcgdmFsdWUuXG4gICAgQHBhcmFtIHogU3RhcnRpbmcgdmFsdWUuXG4gICAgQHBhcmFtIG0gSEFNVFxuKi9cblxuXG52YXIgZm9sZCA9IGhhbXQuZm9sZCA9IGZ1bmN0aW9uIChmLCB6LCBtKSB7XG4gIHZhciByb290ID0gbS5fcm9vdDtcbiAgaWYgKHJvb3QudHlwZSA9PT0gTEVBRikgcmV0dXJuIGYoeiwgcm9vdC52YWx1ZSwgcm9vdC5rZXkpO1xuICB2YXIgdG9WaXNpdCA9IFtyb290LmNoaWxkcmVuXTtcbiAgdmFyIGNoaWxkcmVuID0gdm9pZCAwO1xuXG4gIHdoaWxlIChjaGlsZHJlbiA9IHRvVmlzaXQucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOykge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baSsrXTtcblxuICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLnR5cGUpIHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IExFQUYpIHogPSBmKHosIGNoaWxkLnZhbHVlLCBjaGlsZC5rZXkpO2Vsc2UgdG9WaXNpdC5wdXNoKGNoaWxkLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gejtcbn07XG5cbk1hcC5wcm90b3R5cGUuZm9sZCA9IGZ1bmN0aW9uIChmLCB6KSB7XG4gIHJldHVybiBmb2xkKGYsIHosIHRoaXMpO1xufTtcbi8qKlxuICAgIFZpc2l0IGV2ZXJ5IGVudHJ5IGluIHRoZSBtYXAsIGFnZ3JlZ2F0aW5nIGRhdGEuXG5cbiAgICBPcmRlciBvZiBub2RlcyBpcyBub3QgZ3VhcmFudGVlZC5cblxuICAgIEBwYXJhbSBmIEZ1bmN0aW9uIGludm9rZWQgd2l0aCB2YWx1ZSBhbmQga2V5XG4gICAgQHBhcmFtIG1hcCBIQU1UXG4qL1xuXG5cbnZhciBmb3JFYWNoID0gaGFtdC5mb3JFYWNoID0gZnVuY3Rpb24gKGYsIG1hcCkge1xuICByZXR1cm4gZm9sZChmdW5jdGlvbiAoXywgdmFsdWUsIGtleSkge1xuICAgIHJldHVybiBmKHZhbHVlLCBrZXksIG1hcCk7XG4gIH0sIG51bGwsIG1hcCk7XG59O1xuXG5NYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZikge1xuICByZXR1cm4gZm9yRWFjaChmLCB0aGlzKTtcbn07XG4vKiBBZ2dyZWdhdGVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICAgIEdldCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYG1hcGAuXG4qL1xuXG5cbnZhciBjb3VudCA9IGhhbXQuY291bnQgPSBmdW5jdGlvbiAobWFwKSB7XG4gIHJldHVybiBtYXAuX3NpemU7XG59O1xuXG5NYXAucHJvdG90eXBlLmNvdW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY291bnQodGhpcyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gIGdldDogTWFwLnByb3RvdHlwZS5jb3VudFxufSk7XG4vKiBFeHBvcnRcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmlmICggbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBoYW10O1xufSBlbHNlIHtcbiAgdW5kZWZpbmVkLmhhbXQgPSBoYW10O1xufVxufSk7XG5cbmNsYXNzIEJ1aWx0SW5NYXAge1xuICBjb25zdHJ1Y3RvcihleGlzdGluZykge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9tYXBcIiwgdm9pZCAwKTtcblxuICAgIHRoaXMuX21hcCA9IG5ldyBNYXAoZXhpc3RpbmcgPT09IG51bGwgfHwgZXhpc3RpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4aXN0aW5nLmVudHJpZXMoKSk7XG4gIH1cblxuICBrZXlzKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAua2V5cygpO1xuICB9XG5cbiAgZW50cmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmVudHJpZXMoKTtcbiAgfVxuXG4gIGdldChrKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC5nZXQoayk7XG4gIH1cblxuICBoYXMoaykge1xuICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKGspO1xuICB9XG5cbiAgc2V0KGssIHYpIHtcbiAgICB0aGlzLl9tYXAuc2V0KGssIHYpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkZWxldGUoaykge1xuICAgIHRoaXMuX21hcC5kZWxldGUoayk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBwZXJzaXN0ZW50TWFwKHRoaXMpO1xuICB9XG5cbiAgdG9NYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fbWFwKTtcbiAgfVxuXG59XG5cbmNsYXNzIEhhc2hBcnJheU1hcHBlZFRyaWVNYXAge1xuICAvLyBCZWNhdXNlIGhhbXQuZW1wdHkgaXMgbm90IGEgZnVuY3Rpb24gdGhlcmUgaXMgbm8gd2F5IHRvIGludHJvZHVjZSB0eXBlXG4gIC8vIHBhcmFtZXRlcnMgb24gaXQsIHNvIGVtcHR5IGlzIHR5cGVkIGFzIEhBTVRQbHVzTWFwPHN0cmluZywgbWl4ZWQ+LlxuICAvLyAkRmxvd0lzc3VlXG4gIGNvbnN0cnVjdG9yKGV4aXN0aW5nKSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2hhbXRcIiwgaGFtdF8xLmVtcHR5LmJlZ2luTXV0YXRpb24oKSk7XG5cbiAgICBpZiAoZXhpc3RpbmcgaW5zdGFuY2VvZiBIYXNoQXJyYXlNYXBwZWRUcmllTWFwKSB7XG4gICAgICBjb25zdCBoID0gZXhpc3RpbmcuX2hhbXQuZW5kTXV0YXRpb24oKTtcblxuICAgICAgZXhpc3RpbmcuX2hhbXQgPSBoLmJlZ2luTXV0YXRpb24oKTtcbiAgICAgIHRoaXMuX2hhbXQgPSBoLmJlZ2luTXV0YXRpb24oKTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBleGlzdGluZy5lbnRyaWVzKCkpIHtcbiAgICAgICAgdGhpcy5faGFtdC5zZXQoaywgdik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAga2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5faGFtdC5rZXlzKCk7XG4gIH1cblxuICBlbnRyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYW10LmVudHJpZXMoKTtcbiAgfVxuXG4gIGdldChrKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbXQuZ2V0KGspO1xuICB9XG5cbiAgaGFzKGspIHtcbiAgICByZXR1cm4gdGhpcy5faGFtdC5oYXMoayk7XG4gIH1cblxuICBzZXQoaywgdikge1xuICAgIHRoaXMuX2hhbXQuc2V0KGssIHYpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkZWxldGUoaykge1xuICAgIHRoaXMuX2hhbXQuZGVsZXRlKGspO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gcGVyc2lzdGVudE1hcCh0aGlzKTtcbiAgfVxuXG4gIHRvTWFwKCkge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuX2hhbXQpO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gcGVyc2lzdGVudE1hcChleGlzdGluZykge1xuICBpZiAoUmVjb2lsX2dreCgncmVjb2lsX2hhbXRfMjAyMCcpKSB7XG4gICAgcmV0dXJuIG5ldyBIYXNoQXJyYXlNYXBwZWRUcmllTWFwKGV4aXN0aW5nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEJ1aWx0SW5NYXAoZXhpc3RpbmcpO1xuICB9XG59XG5cbnZhciBSZWNvaWxfUGVyc2lzdGVudE1hcCA9IHtcbiAgcGVyc2lzdGVudE1hcFxufTtcblxudmFyIFJlY29pbF9QZXJzaXN0ZW50TWFwXzEgPSBSZWNvaWxfUGVyc2lzdGVudE1hcC5wZXJzaXN0ZW50TWFwO1xuXG52YXIgUmVjb2lsX1BlcnNpc3RlbnRNYXAkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBwZXJzaXN0ZW50TWFwOiBSZWNvaWxfUGVyc2lzdGVudE1hcF8xXG59KTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG4vKipcbiAqIFJldHVybnMgYSBzZXQgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgbm90XG4gKiBwcmVzZW50IGluIGFueSBvZiB0aGUgc3Vic2VxdWVudCBzZXRzLlxuICpcbiAqIE5vdGU6IHRoaXMgaXMgd3JpdHRlbiBwcm9jZWR1cmFsbHkgKGkuZS4sIHdpdGhvdXQgZmlsdGVyU2V0KSBmb3IgcGVyZm9ybWFudFxuICogdXNlIGluIHRpZ2h0IGxvb3BzLlxuICovXG5cbmZ1bmN0aW9uIGRpZmZlcmVuY2VTZXRzKHNldCwgLi4uc2V0c1dpdGhWYWx1ZXNUb1JlbW92ZSkge1xuICBjb25zdCByZXQgPSBuZXcgU2V0KCk7XG5cbiAgRklSU1Q6IGZvciAoY29uc3QgdmFsdWUgb2Ygc2V0KSB7XG4gICAgZm9yIChjb25zdCBvdGhlclNldCBvZiBzZXRzV2l0aFZhbHVlc1RvUmVtb3ZlKSB7XG4gICAgICBpZiAob3RoZXJTZXQuaGFzKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZSBGSVJTVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXQuYWRkKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbnZhciBSZWNvaWxfZGlmZmVyZW5jZVNldHMgPSBkaWZmZXJlbmNlU2V0cztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG4vKipcbiAqIFJldHVybnMgYSBuZXcgTWFwIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgdGhlIG9yaWdpbmFsLCBidXQgd2l0aCB0aGVcbiAqIHZhbHVlcyByZXBsYWNlZCB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIG1hcE1hcChtYXAsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgbWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICByZXN1bHQuc2V0KGtleSwgY2FsbGJhY2sodmFsdWUsIGtleSkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIFJlY29pbF9tYXBNYXAgPSBtYXBNYXA7XG5cbmZ1bmN0aW9uIG1ha2VHcmFwaCgpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlRGVwczogbmV3IE1hcCgpLFxuICAgIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zOiBuZXcgTWFwKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xvbmVHcmFwaChncmFwaCkge1xuICByZXR1cm4ge1xuICAgIG5vZGVEZXBzOiBSZWNvaWxfbWFwTWFwKGdyYXBoLm5vZGVEZXBzLCBzID0+IG5ldyBTZXQocykpLFxuICAgIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zOiBSZWNvaWxfbWFwTWFwKGdyYXBoLm5vZGVUb05vZGVTdWJzY3JpcHRpb25zLCBzID0+IG5ldyBTZXQocykpXG4gIH07XG59IC8vIE5vdGUgdGhhdCB0aGlzIG92ZXJ3cml0ZXMgdGhlIGRlcHMgb2YgZXhpc3Rpbmcgbm9kZXMsIHJhdGhlciB0aGFuIHVuaW9uaW5nXG4vLyB0aGUgbmV3IGRlcHMgd2l0aCB0aGUgb2xkIGRlcHMuXG5cblxuZnVuY3Rpb24gbWVyZ2VEZXBlbmRlbmN5TWFwSW50b0dyYXBoKGRlcHMsIGdyYXBoLCAvLyBJZiBvbGRlckdyYXBoIGlzIGdpdmVuIHRoZW4gd2Ugd2lsbCBub3Qgb3ZlcndyaXRlIGNoYW5nZXMgbWFkZSB0byB0aGUgZ2l2ZW5cbi8vIGdyYXBoIGNvbXBhcmVkIHdpdGggb2xkZXJHcmFwaDpcbm9sZGVyR3JhcGgpIHtcbiAgY29uc3Qge1xuICAgIG5vZGVEZXBzLFxuICAgIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zXG4gIH0gPSBncmFwaDtcbiAgZGVwcy5mb3JFYWNoKCh1cHN0cmVhbXMsIGRvd25zdHJlYW0pID0+IHtcbiAgICBjb25zdCBleGlzdGluZ1Vwc3RyZWFtcyA9IG5vZGVEZXBzLmdldChkb3duc3RyZWFtKTtcblxuICAgIGlmIChleGlzdGluZ1Vwc3RyZWFtcyAmJiBvbGRlckdyYXBoICYmIGV4aXN0aW5nVXBzdHJlYW1zICE9PSBvbGRlckdyYXBoLm5vZGVEZXBzLmdldChkb3duc3RyZWFtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVXBkYXRlIG5vZGVEZXBzOlxuXG5cbiAgICBub2RlRGVwcy5zZXQoZG93bnN0cmVhbSwgbmV3IFNldCh1cHN0cmVhbXMpKTsgLy8gQWRkIG5ldyBkZXBzIHRvIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zOlxuXG4gICAgY29uc3QgYWRkZWRVcHN0cmVhbXMgPSBleGlzdGluZ1Vwc3RyZWFtcyA9PSBudWxsID8gdXBzdHJlYW1zIDogUmVjb2lsX2RpZmZlcmVuY2VTZXRzKHVwc3RyZWFtcywgZXhpc3RpbmdVcHN0cmVhbXMpO1xuICAgIGFkZGVkVXBzdHJlYW1zLmZvckVhY2godXBzdHJlYW0gPT4ge1xuICAgICAgaWYgKCFub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5oYXModXBzdHJlYW0pKSB7XG4gICAgICAgIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zLnNldCh1cHN0cmVhbSwgbmV3IFNldCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBSZWNvaWxfbnVsbHRocm93cyhub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5nZXQodXBzdHJlYW0pKTtcbiAgICAgIGV4aXN0aW5nLmFkZChkb3duc3RyZWFtKTtcbiAgICB9KTsgLy8gUmVtb3ZlIHJlbW92ZWQgZGVwcyBmcm9tIG5vZGVUb05vZGVTdWJzY3JpcHRpb25zOlxuXG4gICAgaWYgKGV4aXN0aW5nVXBzdHJlYW1zKSB7XG4gICAgICBjb25zdCByZW1vdmVkVXBzdHJlYW1zID0gUmVjb2lsX2RpZmZlcmVuY2VTZXRzKGV4aXN0aW5nVXBzdHJlYW1zLCB1cHN0cmVhbXMpO1xuICAgICAgcmVtb3ZlZFVwc3RyZWFtcy5mb3JFYWNoKHVwc3RyZWFtID0+IHtcbiAgICAgICAgaWYgKCFub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5oYXModXBzdHJlYW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBSZWNvaWxfbnVsbHRocm93cyhub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5nZXQodXBzdHJlYW0pKTtcbiAgICAgICAgZXhpc3RpbmcuZGVsZXRlKGRvd25zdHJlYW0pO1xuXG4gICAgICAgIGlmIChleGlzdGluZy5zaXplID09PSAwKSB7XG4gICAgICAgICAgbm9kZVRvTm9kZVN1YnNjcmlwdGlvbnMuZGVsZXRlKHVwc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZURlcGVuZGVuY3lNYXBUb1N0b3JlKGRlcGVuZGVuY3lNYXAsIHN0b3JlLCB2ZXJzaW9uKSB7XG4gIHZhciBfc3RvcmVTdGF0ZSRuZXh0VHJlZSwgX3N0b3JlU3RhdGUkcHJldmlvdXNULCBfc3RvcmVTdGF0ZSRwcmV2aW91c1QyLCBfc3RvcmVTdGF0ZSRwcmV2aW91c1QzO1xuXG4gIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gIGlmICghKHZlcnNpb24gPT09IHN0b3JlU3RhdGUuY3VycmVudFRyZWUudmVyc2lvbiB8fCB2ZXJzaW9uID09PSAoKF9zdG9yZVN0YXRlJG5leHRUcmVlID0gc3RvcmVTdGF0ZS5uZXh0VHJlZSkgPT09IG51bGwgfHwgX3N0b3JlU3RhdGUkbmV4dFRyZWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zdG9yZVN0YXRlJG5leHRUcmVlLnZlcnNpb24pIHx8IHZlcnNpb24gPT09ICgoX3N0b3JlU3RhdGUkcHJldmlvdXNUID0gc3RvcmVTdGF0ZS5wcmV2aW91c1RyZWUpID09PSBudWxsIHx8IF9zdG9yZVN0YXRlJHByZXZpb3VzVCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3JlU3RhdGUkcHJldmlvdXNULnZlcnNpb24pKSkge1xuICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignVHJpZWQgdG8gc2F2ZSBkZXBlbmRlbmNpZXMgdG8gYSBkaXNjYXJkZWQgdHJlZScpO1xuICB9IC8vIE1lcmdlIHRoZSBkZXBlbmRlbmNpZXMgZGlzY292ZXJlZCBpbnRvIHRoZSBzdG9yZSdzIGRlcGVuZGVuY3kgbWFwXG4gIC8vIGZvciB0aGUgdmVyc2lvbiB0aGF0IHdhcyByZWFkOlxuXG5cbiAgY29uc3QgZ3JhcGggPSBzdG9yZS5nZXRHcmFwaCh2ZXJzaW9uKTtcbiAgbWVyZ2VEZXBlbmRlbmN5TWFwSW50b0dyYXBoKGRlcGVuZGVuY3lNYXAsIGdyYXBoKTsgLy8gSWYgdGhpcyB2ZXJzaW9uIGlzIG5vdCB0aGUgbGF0ZXN0IHZlcnNpb24sIGFsc28gd3JpdGUgdGhlc2UgZGVwZW5kZW5jaWVzXG4gIC8vIGludG8gbGF0ZXIgdmVyc2lvbnMgaWYgdGhleSBkb24ndCBhbHJlYWR5IGhhdmUgdGhlaXIgb3duOlxuXG4gIGlmICh2ZXJzaW9uID09PSAoKF9zdG9yZVN0YXRlJHByZXZpb3VzVDIgPSBzdG9yZVN0YXRlLnByZXZpb3VzVHJlZSkgPT09IG51bGwgfHwgX3N0b3JlU3RhdGUkcHJldmlvdXNUMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3JlU3RhdGUkcHJldmlvdXNUMi52ZXJzaW9uKSkge1xuICAgIGNvbnN0IGN1cnJlbnRHcmFwaCA9IHN0b3JlLmdldEdyYXBoKHN0b3JlU3RhdGUuY3VycmVudFRyZWUudmVyc2lvbik7XG4gICAgbWVyZ2VEZXBlbmRlbmN5TWFwSW50b0dyYXBoKGRlcGVuZGVuY3lNYXAsIGN1cnJlbnRHcmFwaCwgZ3JhcGgpO1xuICB9XG5cbiAgaWYgKHZlcnNpb24gPT09ICgoX3N0b3JlU3RhdGUkcHJldmlvdXNUMyA9IHN0b3JlU3RhdGUucHJldmlvdXNUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmVTdGF0ZSRwcmV2aW91c1QzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RvcmVTdGF0ZSRwcmV2aW91c1QzLnZlcnNpb24pIHx8IHZlcnNpb24gPT09IHN0b3JlU3RhdGUuY3VycmVudFRyZWUudmVyc2lvbikge1xuICAgIHZhciBfc3RvcmVTdGF0ZSRuZXh0VHJlZTI7XG5cbiAgICBjb25zdCBuZXh0VmVyc2lvbiA9IChfc3RvcmVTdGF0ZSRuZXh0VHJlZTIgPSBzdG9yZVN0YXRlLm5leHRUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmVTdGF0ZSRuZXh0VHJlZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zdG9yZVN0YXRlJG5leHRUcmVlMi52ZXJzaW9uO1xuXG4gICAgaWYgKG5leHRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5leHRHcmFwaCA9IHN0b3JlLmdldEdyYXBoKG5leHRWZXJzaW9uKTtcbiAgICAgIG1lcmdlRGVwZW5kZW5jeU1hcEludG9HcmFwaChkZXBlbmRlbmN5TWFwLCBuZXh0R3JhcGgsIGdyYXBoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VEZXBzSW50b0RlcGVuZGVuY3lNYXAoZnJvbSwgaW50bykge1xuICBmcm9tLmZvckVhY2goKHVwc3RyZWFtRGVwcywgZG93bnN0cmVhbU5vZGUpID0+IHtcbiAgICBpZiAoIWludG8uaGFzKGRvd25zdHJlYW1Ob2RlKSkge1xuICAgICAgaW50by5zZXQoZG93bnN0cmVhbU5vZGUsIG5ldyBTZXQoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwcyA9IFJlY29pbF9udWxsdGhyb3dzKGludG8uZ2V0KGRvd25zdHJlYW1Ob2RlKSk7XG4gICAgdXBzdHJlYW1EZXBzLmZvckVhY2goZGVwID0+IGRlcHMuYWRkKGRlcCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVG9EZXBlbmRlbmN5TWFwKGRvd25zdHJlYW0sIHVwc3RyZWFtLCBkZXBlbmRlbmN5TWFwKSB7XG4gIGlmICghZGVwZW5kZW5jeU1hcC5oYXMoZG93bnN0cmVhbSkpIHtcbiAgICBkZXBlbmRlbmN5TWFwLnNldChkb3duc3RyZWFtLCBuZXcgU2V0KCkpO1xuICB9XG5cbiAgUmVjb2lsX251bGx0aHJvd3MoZGVwZW5kZW5jeU1hcC5nZXQoZG93bnN0cmVhbSkpLmFkZCh1cHN0cmVhbSk7XG59XG5cbnZhciBSZWNvaWxfR3JhcGggPSB7XG4gIGFkZFRvRGVwZW5kZW5jeU1hcCxcbiAgY2xvbmVHcmFwaCxcbiAgZ3JhcGg6IG1ha2VHcmFwaCxcbiAgbWVyZ2VEZXBzSW50b0RlcGVuZGVuY3lNYXAsXG4gIHNhdmVEZXBlbmRlbmN5TWFwVG9TdG9yZVxufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmxldCBuZXh0VHJlZVN0YXRlVmVyc2lvbiA9IDA7XG5cbmNvbnN0IGdldE5leHRUcmVlU3RhdGVWZXJzaW9uID0gKCkgPT4gbmV4dFRyZWVTdGF0ZVZlcnNpb24rKztcblxubGV0IG5leHRTdG9yZUlEID0gMDtcblxuY29uc3QgZ2V0TmV4dFN0b3JlSUQgPSAoKSA9PiBuZXh0U3RvcmVJRCsrO1xuXG5sZXQgbmV4dENvbXBvbmVudElEID0gMDtcblxuY29uc3QgZ2V0TmV4dENvbXBvbmVudElEID0gKCkgPT4gbmV4dENvbXBvbmVudElEKys7XG5cbnZhciBSZWNvaWxfS2V5cyA9IHtcbiAgZ2V0TmV4dFRyZWVTdGF0ZVZlcnNpb24sXG4gIGdldE5leHRTdG9yZUlELFxuICBnZXROZXh0Q29tcG9uZW50SURcbn07XG5cbmNvbnN0IHtcbiAgcGVyc2lzdGVudE1hcDogcGVyc2lzdGVudE1hcCQxXG59ID0gUmVjb2lsX1BlcnNpc3RlbnRNYXAkMTtcblxuY29uc3Qge1xuICBncmFwaFxufSA9IFJlY29pbF9HcmFwaDtcblxuY29uc3Qge1xuICBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbjogZ2V0TmV4dFRyZWVTdGF0ZVZlcnNpb24kMVxufSA9IFJlY29pbF9LZXlzO1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlUcmVlU3RhdGUoKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQxKCk7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbixcbiAgICBzdGF0ZUlEOiB2ZXJzaW9uLFxuICAgIHRyYW5zYWN0aW9uTWV0YWRhdGE6IHt9LFxuICAgIGRpcnR5QXRvbXM6IG5ldyBTZXQoKSxcbiAgICBhdG9tVmFsdWVzOiBwZXJzaXN0ZW50TWFwJDEoKSxcbiAgICBub252YWxpZGF0ZWRBdG9tczogcGVyc2lzdGVudE1hcCQxKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZUVtcHR5U3RvcmVTdGF0ZSgpIHtcbiAgY29uc3QgY3VycmVudFRyZWUgPSBtYWtlRW1wdHlUcmVlU3RhdGUoKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VHJlZSxcbiAgICBuZXh0VHJlZTogbnVsbCxcbiAgICBwcmV2aW91c1RyZWU6IG51bGwsXG4gICAgY29tbWl0RGVwdGg6IDAsXG4gICAga25vd25BdG9tczogbmV3IFNldCgpLFxuICAgIGtub3duU2VsZWN0b3JzOiBuZXcgU2V0KCksXG4gICAgdHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zOiBuZXcgTWFwKCksXG4gICAgbm9kZVRyYW5zYWN0aW9uU3Vic2NyaXB0aW9uczogbmV3IE1hcCgpLFxuICAgIG5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnM6IG5ldyBNYXAoKSxcbiAgICBxdWV1ZWRDb21wb25lbnRDYWxsYmFja3NfREVQUkVDQVRFRDogW10sXG4gICAgc3VzcGVuZGVkQ29tcG9uZW50UmVzb2x2ZXJzOiBuZXcgU2V0KCksXG4gICAgZ3JhcGhzQnlWZXJzaW9uOiBuZXcgTWFwKCkuc2V0KGN1cnJlbnRUcmVlLnZlcnNpb24sIGdyYXBoKCkpLFxuICAgIHJldGVudGlvbjoge1xuICAgICAgcmVmZXJlbmNlQ291bnRzOiBuZXcgTWFwKCksXG4gICAgICBub2Rlc1JldGFpbmVkQnlab25lOiBuZXcgTWFwKCksXG4gICAgICByZXRhaW5hYmxlc1RvQ2hlY2tGb3JSZWxlYXNlOiBuZXcgU2V0KClcbiAgICB9LFxuICAgIG5vZGVDbGVhbnVwRnVuY3Rpb25zOiBuZXcgTWFwKClcbiAgfTtcbn1cblxudmFyIFJlY29pbF9TdGF0ZSA9IHtcbiAgbWFrZUVtcHR5VHJlZVN0YXRlLFxuICBtYWtlRW1wdHlTdG9yZVN0YXRlLFxuICBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbjogZ2V0TmV4dFRyZWVTdGF0ZVZlcnNpb24kMVxufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmNsYXNzIFJldGVudGlvblpvbmUge31cblxuZnVuY3Rpb24gcmV0ZW50aW9uWm9uZSgpIHtcbiAgcmV0dXJuIG5ldyBSZXRlbnRpb25ab25lKCk7XG59XG5cbnZhciBSZWNvaWxfUmV0ZW50aW9uWm9uZSA9IHtcbiAgUmV0ZW50aW9uWm9uZSxcbiAgcmV0ZW50aW9uWm9uZVxufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBidWlsdC1pbiBNYXBzIGFuZCBTZXRzIHdpdGhvdXQgbXV0YXRpbmcgdGhlbS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIHNldEJ5QWRkaW5nVG9TZXQoc2V0LCB2KSB7XG4gIGNvbnN0IG5leHQgPSBuZXcgU2V0KHNldCk7XG4gIG5leHQuYWRkKHYpO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gc2V0QnlEZWxldGluZ0Zyb21TZXQoc2V0LCB2KSB7XG4gIGNvbnN0IG5leHQgPSBuZXcgU2V0KHNldCk7XG4gIG5leHQuZGVsZXRlKHYpO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gbWFwQnlTZXR0aW5nSW5NYXAobWFwLCBrLCB2KSB7XG4gIGNvbnN0IG5leHQgPSBuZXcgTWFwKG1hcCk7XG4gIG5leHQuc2V0KGssIHYpO1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gbWFwQnlVcGRhdGluZ0luTWFwKG1hcCwgaywgdXBkYXRlcikge1xuICBjb25zdCBuZXh0ID0gbmV3IE1hcChtYXApO1xuICBuZXh0LnNldChrLCB1cGRhdGVyKG5leHQuZ2V0KGspKSk7XG4gIHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiBtYXBCeURlbGV0aW5nRnJvbU1hcChtYXAsIGspIHtcbiAgY29uc3QgbmV4dCA9IG5ldyBNYXAobWFwKTtcbiAgbmV4dC5kZWxldGUoayk7XG4gIHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiBtYXBCeURlbGV0aW5nTXVsdGlwbGVGcm9tTWFwKG1hcCwga3MpIHtcbiAgY29uc3QgbmV4dCA9IG5ldyBNYXAobWFwKTtcbiAga3MuZm9yRWFjaChrID0+IG5leHQuZGVsZXRlKGspKTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbnZhciBSZWNvaWxfQ29weU9uV3JpdGUgPSB7XG4gIHNldEJ5QWRkaW5nVG9TZXQsXG4gIHNldEJ5RGVsZXRpbmdGcm9tU2V0LFxuICBtYXBCeVNldHRpbmdJbk1hcCxcbiAgbWFwQnlVcGRhdGluZ0luTWFwLFxuICBtYXBCeURlbGV0aW5nRnJvbU1hcCxcbiAgbWFwQnlEZWxldGluZ011bHRpcGxlRnJvbU1hcFxufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaXRlcmFibGUgd2hvc2Ugb3V0cHV0IGlzIGdlbmVyYXRlZCBieSBwYXNzaW5nIHRoZSBpbnB1dFxuICogaXRlcmFibGUncyB2YWx1ZXMgdGhyb3VnaCB0aGUgZmlsdGVyIGZ1bmN0aW9uLlxuICovXG5cbmZ1bmN0aW9uKiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZSwgcHJlZGljYXRlKSB7XG4gIC8vIFVzZSBnZW5lcmF0b3IgdG8gY3JlYXRlIGl0ZXJhYmxlL2l0ZXJhdG9yXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspKSB7XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlY29pbF9maWx0ZXJJdGVyYWJsZSA9IGZpbHRlckl0ZXJhYmxlO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cbi8qKlxuICogUmV0dXJuIGEgcHJveHkgb2JqZWN0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBiYXNlIGFuZCBmYWN0b3JpZXMgb2JqZWN0cy5cbiAqIFRoZSBwcm94eSB3aWxsIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGJhc2Ugb2JqZWN0IGFzLWlzLlxuICogVGhlIGZhY3RvcmllcyBvYmplY3QgY29udGFpbnMgY2FsbGJhY2tzIHRvIG9idGFpbiB0aGUgdmFsdWVzIG9mIHRoZSBwcm9wZXJpZXNcbiAqIGZvciBpdHMga2V5cy5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvdmlkaW5nIHVzZXJzIGFuIG9iamVjdCB3aGVyZSBzb21lIHByb3BlcnRpZXMgbWF5IGJlXG4gKiBsYXppbHkgY29tcHV0ZWQgb25seSBvbiBmaXJzdCBhY2Nlc3MuXG4gKi9cbi8vICRGbG93SXNzdWVbdW5jbGVhci10eXBlXVxuXG5mdW5jdGlvbiBsYXp5UHJveHkoYmFzZSwgZmFjdG9yaWVzKSB7XG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KGJhc2UsIHtcbiAgICAvLyBDb21wdXRlIGFuZCBjYWNoZSBsYXp5IHByb3BlcnR5IGlmIG5vdCBhbHJlYWR5IGRvbmUuXG4gICAgZ2V0OiAodGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICBpZiAoIShwcm9wIGluIHRhcmdldCkgJiYgcHJvcCBpbiBmYWN0b3JpZXMpIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gZmFjdG9yaWVzW3Byb3BdKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgfSxcbiAgICAvLyBUaGlzIG1ldGhvZCBhbGxvd3MgdXNlciB0byBpdGVyYXRlIGtleXMgYXMgbm9ybWFsXG4gICAgb3duS2V5czogdGFyZ2V0ID0+IHtcblxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCk7XG4gICAgfVxuICB9KTsgLy8gJEZsb3dJc3N1ZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuXG4gIHJldHVybiBwcm94eTtcbn1cblxudmFyIFJlY29pbF9sYXp5UHJveHkgPSBsYXp5UHJveHk7XG5cbmNvbnN0IHtcbiAgZ2V0Tm9kZTogZ2V0Tm9kZSQxLFxuICBnZXROb2RlTWF5YmU6IGdldE5vZGVNYXliZSQxLFxuICByZWNvaWxWYWx1ZXNGb3JLZXlzOiByZWNvaWxWYWx1ZXNGb3JLZXlzJDFcbn0gPSBSZWNvaWxfTm9kZTtcblxuY29uc3Qge1xuICBSZXRlbnRpb25ab25lOiBSZXRlbnRpb25ab25lJDFcbn0gPSBSZWNvaWxfUmV0ZW50aW9uWm9uZTtcblxuY29uc3Qge1xuICBzZXRCeUFkZGluZ1RvU2V0OiBzZXRCeUFkZGluZ1RvU2V0JDFcbn0gPSBSZWNvaWxfQ29weU9uV3JpdGU7XG5cblxuXG5cblxuXG5cbiAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuXG5cbmNvbnN0IGVtcHR5U2V0ID0gT2JqZWN0LmZyZWV6ZShuZXcgU2V0KCkpO1xuXG5jbGFzcyBSZWFkT25seVJlY29pbFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUmV0ZW50aW9uRm9yTm9kZShzdG9yZSwgbm9kZUtleSwgcmV0YWluZWRCeSkge1xuICBpZiAoIVJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIG5vZGVzUmV0YWluZWRCeVpvbmVcbiAgfSA9IHN0b3JlLmdldFN0YXRlKCkucmV0ZW50aW9uO1xuXG4gIGZ1bmN0aW9uIGFkZFRvWm9uZSh6b25lKSB7XG4gICAgbGV0IHNldCA9IG5vZGVzUmV0YWluZWRCeVpvbmUuZ2V0KHpvbmUpO1xuXG4gICAgaWYgKCFzZXQpIHtcbiAgICAgIG5vZGVzUmV0YWluZWRCeVpvbmUuc2V0KHpvbmUsIHNldCA9IG5ldyBTZXQoKSk7XG4gICAgfVxuXG4gICAgc2V0LmFkZChub2RlS2V5KTtcbiAgfVxuXG4gIGlmIChyZXRhaW5lZEJ5IGluc3RhbmNlb2YgUmV0ZW50aW9uWm9uZSQxKSB7XG4gICAgYWRkVG9ab25lKHJldGFpbmVkQnkpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmV0YWluZWRCeSkpIHtcbiAgICBmb3IgKGNvbnN0IHpvbmUgb2YgcmV0YWluZWRCeSkge1xuICAgICAgYWRkVG9ab25lKHpvbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFSZWNvaWxfZ2t4KCdyZWNvaWxfbWVtb3J5X21hbmFnYW1lbnRfMjAyMCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcmV0ZW50aW9uXG4gICAgfSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tWm9uZSh6b25lKSB7XG4gICAgICBjb25zdCBzZXQgPSByZXRlbnRpb24ubm9kZXNSZXRhaW5lZEJ5Wm9uZS5nZXQoem9uZSk7XG4gICAgICBzZXQgPT09IG51bGwgfHwgc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXQuZGVsZXRlKG5vZGVLZXkpO1xuXG4gICAgICBpZiAoc2V0ICYmIHNldC5zaXplID09PSAwKSB7XG4gICAgICAgIHJldGVudGlvbi5ub2Rlc1JldGFpbmVkQnlab25lLmRlbGV0ZSh6b25lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmV0YWluZWRCeSBpbnN0YW5jZW9mIFJldGVudGlvblpvbmUkMSkge1xuICAgICAgZGVsZXRlRnJvbVpvbmUocmV0YWluZWRCeSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJldGFpbmVkQnkpKSB7XG4gICAgICBmb3IgKGNvbnN0IHpvbmUgb2YgcmV0YWluZWRCeSkge1xuICAgICAgICBkZWxldGVGcm9tWm9uZSh6b25lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVOb2RlSWZOZXdUb1N0b3JlKHN0b3JlLCB0cmVlU3RhdGUsIGtleSwgdHJpZ2dlcikge1xuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcblxuICBpZiAoc3RvcmVTdGF0ZS5ub2RlQ2xlYW51cEZ1bmN0aW9ucy5oYXMoa2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vZGUgPSBnZXROb2RlJDEoa2V5KTtcbiAgY29uc3QgcmV0ZW50aW9uQ2xlYW51cCA9IGluaXRpYWxpemVSZXRlbnRpb25Gb3JOb2RlKHN0b3JlLCBrZXksIG5vZGUucmV0YWluZWRCeSk7XG4gIGNvbnN0IG5vZGVDbGVhbnVwID0gbm9kZS5pbml0KHN0b3JlLCB0cmVlU3RhdGUsIHRyaWdnZXIpO1xuICBzdG9yZVN0YXRlLm5vZGVDbGVhbnVwRnVuY3Rpb25zLnNldChrZXksICgpID0+IHtcbiAgICBub2RlQ2xlYW51cCgpO1xuICAgIHJldGVudGlvbkNsZWFudXAoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVOb2RlKHN0b3JlLCBrZXksIHRyaWdnZXIpIHtcbiAgaW5pdGlhbGl6ZU5vZGVJZk5ld1RvU3RvcmUoc3RvcmUsIHN0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWUsIGtleSwgdHJpZ2dlcik7XG59XG5cbmZ1bmN0aW9uIGNsZWFuVXBOb2RlKHN0b3JlLCBrZXkpIHtcbiAgdmFyIF9zdGF0ZSRub2RlQ2xlYW51cEZ1bjtcblxuICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIChfc3RhdGUkbm9kZUNsZWFudXBGdW4gPSBzdGF0ZS5ub2RlQ2xlYW51cEZ1bmN0aW9ucy5nZXQoa2V5KSkgPT09IG51bGwgfHwgX3N0YXRlJG5vZGVDbGVhbnVwRnVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RhdGUkbm9kZUNsZWFudXBGdW4oKTtcbiAgc3RhdGUubm9kZUNsZWFudXBGdW5jdGlvbnMuZGVsZXRlKGtleSk7XG59IC8vIEdldCB0aGUgY3VycmVudCB2YWx1ZSBsb2FkYWJsZSBvZiBhIG5vZGUgYW5kIHVwZGF0ZSB0aGUgc3RhdGUuXG4vLyBVcGRhdGUgZGVwZW5kZW5jaWVzIGFuZCBzdWJzY3JpcHRpb25zIGZvciBzZWxlY3RvcnMuXG4vLyBVcGRhdGUgc2F2ZWQgdmFsdWUgdmFsaWRhdGlvbiBmb3IgYXRvbXMuXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUxvYWRhYmxlKHN0b3JlLCBzdGF0ZSwga2V5KSB7XG4gIGluaXRpYWxpemVOb2RlSWZOZXdUb1N0b3JlKHN0b3JlLCBzdGF0ZSwga2V5LCAnZ2V0Jyk7XG4gIHJldHVybiBnZXROb2RlJDEoa2V5KS5nZXQoc3RvcmUsIHN0YXRlKTtcbn0gLy8gUGVlayBhdCB0aGUgY3VycmVudCB2YWx1ZSBsb2FkYWJsZSBmb3IgYSBub2RlIHdpdGhvdXQgYW55IGV2YWx1YXRpb24gb3Igc3RhdGUgY2hhbmdlXG5cblxuZnVuY3Rpb24gcGVla05vZGVMb2FkYWJsZShzdG9yZSwgc3RhdGUsIGtleSkge1xuICByZXR1cm4gZ2V0Tm9kZSQxKGtleSkucGVlayhzdG9yZSwgc3RhdGUpO1xufSAvLyBXcml0ZSB2YWx1ZSBkaXJlY3RseSB0byBzdGF0ZSBieXBhc3NpbmcgdGhlIE5vZGUgaW50ZXJmYWNlIGFzIHRoZSBub2RlXG4vLyBkZWZpbml0aW9ucyBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQgeWV0IHdoZW4gcHJvY2Vzc2luZyB0aGUgaW5pdGlhbCBzbmFwc2hvdC5cblxuXG5mdW5jdGlvbiBzZXRVbnZhbGlkYXRlZEF0b21WYWx1ZV9ERVBSRUNBVEVEKHN0YXRlLCBrZXksIG5ld1ZhbHVlKSB7XG4gIHZhciBfbm9kZSRpbnZhbGlkYXRlO1xuXG4gIGNvbnN0IG5vZGUgPSBnZXROb2RlTWF5YmUkMShrZXkpO1xuICBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfbm9kZSRpbnZhbGlkYXRlID0gbm9kZS5pbnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfbm9kZSRpbnZhbGlkYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbm9kZSRpbnZhbGlkYXRlLmNhbGwobm9kZSwgc3RhdGUpO1xuICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICBhdG9tVmFsdWVzOiBzdGF0ZS5hdG9tVmFsdWVzLmNsb25lKCkuZGVsZXRlKGtleSksXG4gICAgbm9udmFsaWRhdGVkQXRvbXM6IHN0YXRlLm5vbnZhbGlkYXRlZEF0b21zLmNsb25lKCkuc2V0KGtleSwgbmV3VmFsdWUpLFxuICAgIGRpcnR5QXRvbXM6IHNldEJ5QWRkaW5nVG9TZXQkMShzdGF0ZS5kaXJ0eUF0b21zLCBrZXkpXG4gIH07XG59IC8vIFJldHVybiB0aGUgZGlzY292ZXJlZCBkZXBlbmRlbmNpZXMgYW5kIHZhbHVlcyB0byBiZSB3cml0dGVuIGJ5IHNldHRpbmdcbi8vIGEgbm9kZSB2YWx1ZS4gKE11bHRpcGxlIHZhbHVlcyBtYXkgYmUgd3JpdHRlbiBkdWUgdG8gc2VsZWN0b3JzIGdldHRpbmcgdG9cbi8vIHNldCB1cHN0cmVhbXM7IGRlcHMgbWF5IGJlIGRpc2NvdmVyZWQgYmVjYXVzZSBvZiByZWFkcyBpbiB1cGRhdGVyIGZ1bmN0aW9ucy4pXG5cblxuZnVuY3Rpb24gc2V0Tm9kZVZhbHVlKHN0b3JlLCBzdGF0ZSwga2V5LCBuZXdWYWx1ZSkge1xuICBjb25zdCBub2RlID0gZ2V0Tm9kZSQxKGtleSk7XG5cbiAgaWYgKG5vZGUuc2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgUmVhZE9ubHlSZWNvaWxWYWx1ZUVycm9yKGBBdHRlbXB0IHRvIHNldCByZWFkLW9ubHkgUmVjb2lsVmFsdWU6ICR7a2V5fWApO1xuICB9XG5cbiAgY29uc3Qgc2V0ID0gbm9kZS5zZXQ7IC8vIHNvIGZsb3cgZG9lc24ndCBsb3NlIHRoZSBhYm92ZSByZWZpbmVtZW50LlxuXG4gIGluaXRpYWxpemVOb2RlSWZOZXdUb1N0b3JlKHN0b3JlLCBzdGF0ZSwga2V5LCAnc2V0Jyk7XG4gIHJldHVybiBzZXQoc3RvcmUsIHN0YXRlLCBuZXdWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBlZWtOb2RlSW5mbyhzdG9yZSwgc3RhdGUsIGtleSkge1xuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgZ3JhcGggPSBzdG9yZS5nZXRHcmFwaChzdGF0ZS52ZXJzaW9uKTtcbiAgY29uc3QgdHlwZSA9IGdldE5vZGUkMShrZXkpLm5vZGVUeXBlO1xuICByZXR1cm4gUmVjb2lsX2xhenlQcm94eSh7XG4gICAgdHlwZVxuICB9LCB7XG4gICAgbG9hZGFibGU6ICgpID0+IHBlZWtOb2RlTG9hZGFibGUoc3RvcmUsIHN0YXRlLCBrZXkpLFxuICAgIGlzQWN0aXZlOiAoKSA9PiBzdG9yZVN0YXRlLmtub3duQXRvbXMuaGFzKGtleSkgfHwgc3RvcmVTdGF0ZS5rbm93blNlbGVjdG9ycy5oYXMoa2V5KSxcbiAgICBpc1NldDogKCkgPT4gdHlwZSA9PT0gJ3NlbGVjdG9yJyA/IGZhbHNlIDogc3RhdGUuYXRvbVZhbHVlcy5oYXMoa2V5KSxcbiAgICBpc01vZGlmaWVkOiAoKSA9PiBzdGF0ZS5kaXJ0eUF0b21zLmhhcyhrZXkpLFxuICAgIC8vIFJlcG9ydCBjdXJyZW50IGRlcGVuZGVuY2llcy4gIElmIHRoZSBub2RlIGhhc24ndCBiZWVuIGV2YWx1YXRlZCwgdGhlblxuICAgIC8vIGRlcGVuZGVuY2llcyBtYXkgYmUgbWlzc2luZyBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICBkZXBzOiAoKSA9PiB7XG4gICAgICB2YXIgX2dyYXBoJG5vZGVEZXBzJGdldDtcblxuICAgICAgcmV0dXJuIHJlY29pbFZhbHVlc0ZvcktleXMkMSgoX2dyYXBoJG5vZGVEZXBzJGdldCA9IGdyYXBoLm5vZGVEZXBzLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfZ3JhcGgkbm9kZURlcHMkZ2V0ICE9PSB2b2lkIDAgPyBfZ3JhcGgkbm9kZURlcHMkZ2V0IDogW10pO1xuICAgIH0sXG4gICAgLy8gUmVwb3J0cyBhbGwgXCJjdXJyZW50XCIgc3Vic2NyaWJlcnMuICBFdmFsdWF0aW5nIG90aGVyIG5vZGVzIG9yXG4gICAgLy8gcHJldmlvdXMgaW4tcHJvZ3Jlc3MgYXN5bmMgZXZhbHVhdGlvbnMgbWF5IGludHJvZHVjZSBuZXcgc3Vic2NyaWJlcnMuXG4gICAgc3Vic2NyaWJlcnM6ICgpID0+IHtcbiAgICAgIHZhciBfc3RvcmVTdGF0ZSRub2RlVG9Db20sIF9zdG9yZVN0YXRlJG5vZGVUb0NvbTI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVzOiByZWNvaWxWYWx1ZXNGb3JLZXlzJDEoUmVjb2lsX2ZpbHRlckl0ZXJhYmxlKGdldERvd25zdHJlYW1Ob2RlcyhzdG9yZSwgc3RhdGUsIG5ldyBTZXQoW2tleV0pKSwgbm9kZUtleSA9PiBub2RlS2V5ICE9PSBrZXkpKSxcbiAgICAgICAgY29tcG9uZW50czogUmVjb2lsX21hcEl0ZXJhYmxlKChfc3RvcmVTdGF0ZSRub2RlVG9Db20gPSAoX3N0b3JlU3RhdGUkbm9kZVRvQ29tMiA9IHN0b3JlU3RhdGUubm9kZVRvQ29tcG9uZW50U3Vic2NyaXB0aW9ucy5nZXQoa2V5KSkgPT09IG51bGwgfHwgX3N0b3JlU3RhdGUkbm9kZVRvQ29tMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3JlU3RhdGUkbm9kZVRvQ29tMi52YWx1ZXMoKSkgIT09IG51bGwgJiYgX3N0b3JlU3RhdGUkbm9kZVRvQ29tICE9PSB2b2lkIDAgPyBfc3RvcmVTdGF0ZSRub2RlVG9Db20gOiBbXSwgKFtuYW1lXSkgPT4gKHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0pKVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufSAvLyBGaW5kIGFsbCBvZiB0aGUgcmVjdXJzaXZlbHkgZGVwZW5kZW50IG5vZGVzXG5cblxuZnVuY3Rpb24gZ2V0RG93bnN0cmVhbU5vZGVzKHN0b3JlLCBzdGF0ZSwga2V5cykge1xuICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHZpc2l0aW5nTm9kZXMgPSBBcnJheS5mcm9tKGtleXMpO1xuICBjb25zdCBncmFwaCA9IHN0b3JlLmdldEdyYXBoKHN0YXRlLnZlcnNpb24pO1xuXG4gIGZvciAobGV0IGtleSA9IHZpc2l0aW5nTm9kZXMucG9wKCk7IGtleTsga2V5ID0gdmlzaXRpbmdOb2Rlcy5wb3AoKSkge1xuICAgIHZhciBfZ3JhcGgkbm9kZVRvTm9kZVN1YnM7XG5cbiAgICB2aXNpdGVkTm9kZXMuYWRkKGtleSk7XG4gICAgY29uc3Qgc3Vic2NyaWJlZE5vZGVzID0gKF9ncmFwaCRub2RlVG9Ob2RlU3VicyA9IGdyYXBoLm5vZGVUb05vZGVTdWJzY3JpcHRpb25zLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfZ3JhcGgkbm9kZVRvTm9kZVN1YnMgIT09IHZvaWQgMCA/IF9ncmFwaCRub2RlVG9Ob2RlU3VicyA6IGVtcHR5U2V0O1xuXG4gICAgZm9yIChjb25zdCBkb3duc3RyZWFtTm9kZSBvZiBzdWJzY3JpYmVkTm9kZXMpIHtcbiAgICAgIGlmICghdmlzaXRlZE5vZGVzLmhhcyhkb3duc3RyZWFtTm9kZSkpIHtcbiAgICAgICAgdmlzaXRpbmdOb2Rlcy5wdXNoKGRvd25zdHJlYW1Ob2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmlzaXRlZE5vZGVzO1xufVxuXG52YXIgUmVjb2lsX0Z1bmN0aW9uYWxDb3JlID0ge1xuICBnZXROb2RlTG9hZGFibGUsXG4gIHBlZWtOb2RlTG9hZGFibGUsXG4gIHNldE5vZGVWYWx1ZSxcbiAgaW5pdGlhbGl6ZU5vZGUsXG4gIGNsZWFuVXBOb2RlLFxuICBzZXRVbnZhbGlkYXRlZEF0b21WYWx1ZV9ERVBSRUNBVEVELFxuICBwZWVrTm9kZUluZm8sXG4gIGdldERvd25zdHJlYW1Ob2Rlc1xufTtcblxudmFyIF9jcmVhdGVNdXRhYmxlU291cmNlLCBfdXNlTXV0YWJsZVNvdXJjZSwgX3VzZVN5bmNFeHRlcm5hbFN0b3JlO1xuXG5cblxuXG5cbmNvbnN0IGNyZWF0ZU11dGFibGVTb3VyY2UgPSAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuKF9jcmVhdGVNdXRhYmxlU291cmNlID0gcmVhY3QuY3JlYXRlTXV0YWJsZVNvdXJjZSkgIT09IG51bGwgJiYgX2NyZWF0ZU11dGFibGVTb3VyY2UgIT09IHZvaWQgMCA/IF9jcmVhdGVNdXRhYmxlU291cmNlIDogcmVhY3QudW5zdGFibGVfY3JlYXRlTXV0YWJsZVNvdXJjZTtcbmNvbnN0IHVzZU11dGFibGVTb3VyY2UgPSAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuKF91c2VNdXRhYmxlU291cmNlID0gcmVhY3QudXNlTXV0YWJsZVNvdXJjZSkgIT09IG51bGwgJiYgX3VzZU11dGFibGVTb3VyY2UgIT09IHZvaWQgMCA/IF91c2VNdXRhYmxlU291cmNlIDogcmVhY3QudW5zdGFibGVfdXNlTXV0YWJsZVNvdXJjZTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODZcblxuY29uc3QgdXNlU3luY0V4dGVybmFsU3RvcmUgPSAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuKF91c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlKSAhPT0gbnVsbCAmJiBfdXNlU3luY0V4dGVybmFsU3RvcmUgIT09IHZvaWQgMCA/IF91c2VTeW5jRXh0ZXJuYWxTdG9yZSA6IC8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5yZWFjdC51bnN0YWJsZV91c2VTeW5jRXh0ZXJuYWxTdG9yZTtcblxuLyoqXG4gKiBtb2RlOiBUaGUgUmVhY3QgQVBJIGFuZCBhcHByb2FjaCB0byB1c2UgZm9yIHN5bmNpbmcgc3RhdGUgd2l0aCBSZWFjdFxuICogZWFybHk6IFJlLXJlbmRlcnMgZnJvbSBSZWNvaWwgdXBkYXRlcyBvY2N1cjpcbiAqICAgIDEpIGVhcmxpZXJcbiAqICAgIDIpIGluIHN5bmMgd2l0aCBSZWFjdCB1cGRhdGVzIGluIHRoZSBzYW1lIGJhdGNoXG4gKiAgICAzKSBiZWZvcmUgdHJhbnNhY3Rpb24gb2JzZXJ2ZXJzIGluc3RlYWQgb2YgYWZ0ZXIuXG4gKiBjb25jdXJyZW50OiBJcyB0aGUgY3VycmVudCBtb2RlIGNvbXBhdGlibGUgd2l0aCBDb25jdXJyZW50IE1vZGUgYW5kIHVzZVRyYW5zaXRpb24oKVxuICovXG5mdW5jdGlvbiByZWFjdE1vZGUoKSB7XG4gIC8vIE5PVEU6IFRoaXMgbW9kZSBpcyBjdXJyZW50bHkgYnJva2VuIHdpdGggc29tZSBTdXNwZW5zZSBjYXNlc1xuICAvLyBzZWUgUmVjb2lsX3NlbGVjdG9yLXRlc3QuanNcbiAgaWYgKFJlY29pbF9na3goJ3JlY29pbF90cmFuc2l0aW9uX3N1cHBvcnQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiAnVFJBTlNJVElPTl9TVVBQT1JUJyxcbiAgICAgIGVhcmx5OiB0cnVlLFxuICAgICAgY29uY3VycmVudDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZiAoUmVjb2lsX2dreCgncmVjb2lsX3N5bmNfZXh0ZXJuYWxfc3RvcmUnKSAmJiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6ICdTWU5DX0VYVEVSTkFMX1NUT1JFJyxcbiAgICAgIGVhcmx5OiB0cnVlLFxuICAgICAgY29uY3VycmVudDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgaWYgKFJlY29pbF9na3goJ3JlY29pbF9tdXRhYmxlX3NvdXJjZScpICYmIHVzZU11dGFibGVTb3VyY2UgIT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LiRkaXNhYmxlUmVjb2lsVmFsdWVNdXRhYmxlU291cmNlX1RFTVBfSEFDS19ET19OT1RfVVNFKSB7XG4gICAgcmV0dXJuIFJlY29pbF9na3goJ3JlY29pbF9zdXBwcmVzc19yZXJlbmRlcl9pbl9jYWxsYmFjaycpID8ge1xuICAgICAgbW9kZTogJ01VVEFCTEVfU09VUkNFJyxcbiAgICAgIGVhcmx5OiB0cnVlLFxuICAgICAgY29uY3VycmVudDogdHJ1ZVxuICAgIH0gOiB7XG4gICAgICBtb2RlOiAnTVVUQUJMRV9TT1VSQ0UnLFxuICAgICAgZWFybHk6IGZhbHNlLFxuICAgICAgY29uY3VycmVudDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIFJlY29pbF9na3goJ3JlY29pbF9zdXBwcmVzc19yZXJlbmRlcl9pbl9jYWxsYmFjaycpID8ge1xuICAgIG1vZGU6ICdMRUdBQ1knLFxuICAgIGVhcmx5OiB0cnVlLFxuICAgIGNvbmN1cnJlbnQ6IGZhbHNlXG4gIH0gOiB7XG4gICAgbW9kZTogJ0xFR0FDWScsXG4gICAgZWFybHk6IGZhbHNlLFxuICAgIGNvbmN1cnJlbnQ6IGZhbHNlXG4gIH07XG59XG5cbnZhciBSZWNvaWxfUmVhY3RNb2RlID0ge1xuICBjcmVhdGVNdXRhYmxlU291cmNlLFxuICB1c2VNdXRhYmxlU291cmNlLFxuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxcbiAgcmVhY3RNb2RlXG59O1xuXG5jb25zdCB7XG4gIGdldERvd25zdHJlYW1Ob2RlczogZ2V0RG93bnN0cmVhbU5vZGVzJDEsXG4gIGdldE5vZGVMb2FkYWJsZTogZ2V0Tm9kZUxvYWRhYmxlJDEsXG4gIHNldE5vZGVWYWx1ZTogc2V0Tm9kZVZhbHVlJDFcbn0gPSBSZWNvaWxfRnVuY3Rpb25hbENvcmU7XG5cbmNvbnN0IHtcbiAgZ2V0TmV4dENvbXBvbmVudElEOiBnZXROZXh0Q29tcG9uZW50SUQkMVxufSA9IFJlY29pbF9LZXlzO1xuXG5jb25zdCB7XG4gIGdldE5vZGU6IGdldE5vZGUkMixcbiAgZ2V0Tm9kZU1heWJlOiBnZXROb2RlTWF5YmUkMlxufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIERlZmF1bHRWYWx1ZTogRGVmYXVsdFZhbHVlJDEsXG4gIFJlY29pbFZhbHVlTm90UmVhZHk6IFJlY29pbFZhbHVlTm90UmVhZHkkMVxufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIHJlYWN0TW9kZTogcmVhY3RNb2RlJDFcbn0gPSBSZWNvaWxfUmVhY3RNb2RlO1xuXG5jb25zdCB7XG4gIEFic3RyYWN0UmVjb2lsVmFsdWU6IEFic3RyYWN0UmVjb2lsVmFsdWUkMSxcbiAgUmVjb2lsU3RhdGU6IFJlY29pbFN0YXRlJDEsXG4gIFJlY29pbFZhbHVlUmVhZE9ubHk6IFJlY29pbFZhbHVlUmVhZE9ubHkkMSxcbiAgaXNSZWNvaWxWYWx1ZTogaXNSZWNvaWxWYWx1ZSQxXG59ID0gUmVjb2lsX1JlY29pbFZhbHVlJDE7XG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlKHN0b3JlLCB7XG4gIGtleVxufSwgdHJlZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKS5jdXJyZW50VHJlZSkge1xuICB2YXIgX3N0b3JlU3RhdGUkbmV4dFRyZWUsIF9zdG9yZVN0YXRlJHByZXZpb3VzVDtcblxuICAvLyBSZWFkaW5nIGZyb20gYW4gb2xkZXIgdHJlZSBjYW4gY2F1c2UgYnVncyBiZWNhdXNlIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZVxuICAvLyBkaXNjb3ZlciBkdXJpbmcgdGhlIHJlYWQgYXJlIGxvc3QuXG4gIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gIGlmICghKHRyZWVTdGF0ZS52ZXJzaW9uID09PSBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlLnZlcnNpb24gfHwgdHJlZVN0YXRlLnZlcnNpb24gPT09ICgoX3N0b3JlU3RhdGUkbmV4dFRyZWUgPSBzdG9yZVN0YXRlLm5leHRUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmVTdGF0ZSRuZXh0VHJlZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3JlU3RhdGUkbmV4dFRyZWUudmVyc2lvbikgfHwgdHJlZVN0YXRlLnZlcnNpb24gPT09ICgoX3N0b3JlU3RhdGUkcHJldmlvdXNUID0gc3RvcmVTdGF0ZS5wcmV2aW91c1RyZWUpID09PSBudWxsIHx8IF9zdG9yZVN0YXRlJHByZXZpb3VzVCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3JlU3RhdGUkcHJldmlvdXNULnZlcnNpb24pKSkge1xuICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignVHJpZWQgdG8gcmVhZCBmcm9tIGEgZGlzY2FyZGVkIHRyZWUnKTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRhYmxlID0gZ2V0Tm9kZUxvYWRhYmxlJDEoc3RvcmUsIHRyZWVTdGF0ZSwga2V5KTtcblxuICBpZiAobG9hZGFibGUuc3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIGxvYWRhYmxlLmNvbnRlbnRzLmNhdGNoKCgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogSEFDSzogaW50ZXJjZXB0IHRocm93biBlcnJvciBoZXJlIHRvIHByZXZlbnQgYW4gdW5jYXVnaHQgcHJvbWlzZSBleGNlcHRpb24uIElkZWFsbHkgdGhpcyB3b3VsZCBoYXBwZW4gY2xvc2VyIHRvIHNlbGVjdG9yXG4gICAgICAgKiBleGVjdXRpb24gKHBlcmhhcHMgaW50cm9kdWNpbmcgYSBuZXcgRVJST1IgY2xhc3MgdG8gYmUgcmVzb2x2ZWQgYnkgYXN5bmMgc2VsZWN0b3JzIHRoYXQgYXJlIGluIGFuIGVycm9yIHN0YXRlKVxuICAgICAgICovXG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbG9hZGFibGU7XG59XG5cbmZ1bmN0aW9uIGFwcGx5QXRvbVZhbHVlV3JpdGVzKGF0b21WYWx1ZXMsIHdyaXRlcykge1xuICBjb25zdCByZXN1bHQgPSBhdG9tVmFsdWVzLmNsb25lKCk7XG4gIHdyaXRlcy5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgaWYgKHYuc3RhdGUgPT09ICdoYXNWYWx1ZScgJiYgdi5jb250ZW50cyBpbnN0YW5jZW9mIERlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICByZXN1bHQuZGVsZXRlKGspO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQuc2V0KGssIHYpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHZhbHVlRnJvbVZhbHVlT3JVcGRhdGVyKHN0b3JlLCBzdGF0ZSwge1xuICBrZXlcbn0sIHZhbHVlT3JVcGRhdGVyKSB7XG4gIGlmICh0eXBlb2YgdmFsdWVPclVwZGF0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVcGRhdGVyIGZvcm06IHBhc3MgaW4gdGhlIGN1cnJlbnQgdmFsdWUuIFRocm93IGlmIHRoZSBjdXJyZW50IHZhbHVlXG4gICAgLy8gaXMgdW5hdmFpbGFibGUgKG5hbWVseSB3aGVuIHVwZGF0aW5nIGFuIGFzeW5jIHNlbGVjdG9yIHRoYXQnc1xuICAgIC8vIHBlbmRpbmcgb3IgZXJyb3JlZCk6XG4gICAgY29uc3QgY3VycmVudCA9IGdldE5vZGVMb2FkYWJsZSQxKHN0b3JlLCBzdGF0ZSwga2V5KTtcblxuICAgIGlmIChjdXJyZW50LnN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRocm93IG5ldyBSZWNvaWxWYWx1ZU5vdFJlYWR5JDEoa2V5KTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQuc3RhdGUgPT09ICdoYXNFcnJvcicpIHtcbiAgICAgIHRocm93IGN1cnJlbnQuY29udGVudHM7XG4gICAgfSAvLyBUIGl0c2VsZiBtYXkgYmUgYSBmdW5jdGlvbiwgc28gb3VyIHJlZmluZW1lbnQgaXMgbm90IHN1ZmZpY2llbnQ6XG5cblxuICAgIHJldHVybiB2YWx1ZU9yVXBkYXRlcihjdXJyZW50LmNvbnRlbnRzKTsgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlT3JVcGRhdGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5QWN0aW9uKHN0b3JlLCBzdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ3NldCcpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWNvaWxWYWx1ZSxcbiAgICAgIHZhbHVlT3JVcGRhdGVyXG4gICAgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlRnJvbVZhbHVlT3JVcGRhdGVyKHN0b3JlLCBzdGF0ZSwgcmVjb2lsVmFsdWUsIHZhbHVlT3JVcGRhdGVyKTtcbiAgICBjb25zdCB3cml0ZXMgPSBzZXROb2RlVmFsdWUkMShzdG9yZSwgc3RhdGUsIHJlY29pbFZhbHVlLmtleSwgbmV3VmFsdWUpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBsb2FkYWJsZV0gb2Ygd3JpdGVzLmVudHJpZXMoKSkge1xuICAgICAgd3JpdGVMb2FkYWJsZVRvVHJlZVN0YXRlKHN0YXRlLCBrZXksIGxvYWRhYmxlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdzZXRMb2FkYWJsZScpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWNvaWxWYWx1ZToge1xuICAgICAgICBrZXlcbiAgICAgIH0sXG4gICAgICBsb2FkYWJsZVxuICAgIH0gPSBhY3Rpb247XG4gICAgd3JpdGVMb2FkYWJsZVRvVHJlZVN0YXRlKHN0YXRlLCBrZXksIGxvYWRhYmxlKTtcbiAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ21hcmtNb2RpZmllZCcpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWNvaWxWYWx1ZToge1xuICAgICAgICBrZXlcbiAgICAgIH1cbiAgICB9ID0gYWN0aW9uO1xuICAgIHN0YXRlLmRpcnR5QXRvbXMuYWRkKGtleSk7XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdzZXRVbnZhbGlkYXRlZCcpIHtcbiAgICB2YXIgX25vZGUkaW52YWxpZGF0ZTtcblxuICAgIC8vIFdyaXRlIHZhbHVlIGRpcmVjdGx5IHRvIHN0YXRlIGJ5cGFzc2luZyB0aGUgTm9kZSBpbnRlcmZhY2UgYXMgdGhlIG5vZGVcbiAgICAvLyBkZWZpbml0aW9ucyBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQgeWV0IHdoZW4gcHJvY2Vzc2luZyB0aGUgaW5pdGlhbCBzbmFwc2hvdC5cbiAgICBjb25zdCB7XG4gICAgICByZWNvaWxWYWx1ZToge1xuICAgICAgICBrZXlcbiAgICAgIH0sXG4gICAgICB1bnZhbGlkYXRlZFZhbHVlXG4gICAgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZU1heWJlJDIoa2V5KTtcbiAgICBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfbm9kZSRpbnZhbGlkYXRlID0gbm9kZS5pbnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfbm9kZSRpbnZhbGlkYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbm9kZSRpbnZhbGlkYXRlLmNhbGwobm9kZSwgc3RhdGUpO1xuICAgIHN0YXRlLmF0b21WYWx1ZXMuZGVsZXRlKGtleSk7XG4gICAgc3RhdGUubm9udmFsaWRhdGVkQXRvbXMuc2V0KGtleSwgdW52YWxpZGF0ZWRWYWx1ZSk7XG4gICAgc3RhdGUuZGlydHlBdG9tcy5hZGQoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICBSZWNvaWxfcmVjb3ZlcmFibGVWaW9sYXRpb24oYFVua25vd24gYWN0aW9uICR7YWN0aW9uLnR5cGV9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVMb2FkYWJsZVRvVHJlZVN0YXRlKHN0YXRlLCBrZXksIGxvYWRhYmxlKSB7XG4gIGlmIChsb2FkYWJsZS5zdGF0ZSA9PT0gJ2hhc1ZhbHVlJyAmJiBsb2FkYWJsZS5jb250ZW50cyBpbnN0YW5jZW9mIERlZmF1bHRWYWx1ZSQxKSB7XG4gICAgc3RhdGUuYXRvbVZhbHVlcy5kZWxldGUoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5hdG9tVmFsdWVzLnNldChrZXksIGxvYWRhYmxlKTtcbiAgfVxuXG4gIHN0YXRlLmRpcnR5QXRvbXMuYWRkKGtleSk7XG4gIHN0YXRlLm5vbnZhbGlkYXRlZEF0b21zLmRlbGV0ZShrZXkpO1xufVxuXG5mdW5jdGlvbiBhcHBseUFjdGlvbnNUb1N0b3JlKHN0b3JlLCBhY3Rpb25zKSB7XG4gIHN0b3JlLnJlcGxhY2VTdGF0ZShzdGF0ZSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSBjb3B5VHJlZVN0YXRlKHN0YXRlKTtcblxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgIGFwcGx5QWN0aW9uKHN0b3JlLCBuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpbnZhbGlkYXRlRG93bnN0cmVhbXMoc3RvcmUsIG5ld1N0YXRlKTtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBxdWV1ZU9yUGVyZm9ybVN0YXRlVXBkYXRlKHN0b3JlLCBhY3Rpb24pIHtcbiAgaWYgKGJhdGNoU3RhY2subGVuZ3RoKSB7XG4gICAgY29uc3QgYWN0aW9uc0J5U3RvcmUgPSBiYXRjaFN0YWNrW2JhdGNoU3RhY2subGVuZ3RoIC0gMV07XG4gICAgbGV0IGFjdGlvbnMgPSBhY3Rpb25zQnlTdG9yZS5nZXQoc3RvcmUpO1xuXG4gICAgaWYgKCFhY3Rpb25zKSB7XG4gICAgICBhY3Rpb25zQnlTdG9yZS5zZXQoc3RvcmUsIGFjdGlvbnMgPSBbXSk7XG4gICAgfVxuXG4gICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgYXBwbHlBY3Rpb25zVG9TdG9yZShzdG9yZSwgW2FjdGlvbl0pO1xuICB9XG59XG5cbmNvbnN0IGJhdGNoU3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gYmF0Y2hTdGFydCgpIHtcbiAgY29uc3QgYWN0aW9uc0J5U3RvcmUgPSBuZXcgTWFwKCk7XG4gIGJhdGNoU3RhY2sucHVzaChhY3Rpb25zQnlTdG9yZSk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBbc3RvcmUsIGFjdGlvbnNdIG9mIGFjdGlvbnNCeVN0b3JlKSB7XG4gICAgICBhcHBseUFjdGlvbnNUb1N0b3JlKHN0b3JlLCBhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZWQgPSBiYXRjaFN0YWNrLnBvcCgpO1xuXG4gICAgaWYgKHBvcHBlZCAhPT0gYWN0aW9uc0J5U3RvcmUpIHtcbiAgICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignSW5jb3JyZWN0IG9yZGVyIG9mIGJhdGNoIHBvcHBpbmcnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvcHlUcmVlU3RhdGUoc3RhdGUpIHtcbiAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgYXRvbVZhbHVlczogc3RhdGUuYXRvbVZhbHVlcy5jbG9uZSgpLFxuICAgIG5vbnZhbGlkYXRlZEF0b21zOiBzdGF0ZS5ub252YWxpZGF0ZWRBdG9tcy5jbG9uZSgpLFxuICAgIGRpcnR5QXRvbXM6IG5ldyBTZXQoc3RhdGUuZGlydHlBdG9tcylcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZURvd25zdHJlYW1zKHN0b3JlLCBzdGF0ZSkge1xuICAvLyBJbmZvcm0gYW55IG5vZGVzIHRoYXQgd2VyZSBjaGFuZ2VkIG9yIGRvd25zdHJlYW0gb2YgY2hhbmdlcyBzbyB0aGF0IHRoZXlcbiAgLy8gY2FuIGNsZWFyIG91dCBhbnkgY2FjaGVzIGFzIG5lZWRlZCBkdWUgdG8gdGhlIHVwZGF0ZTpcbiAgY29uc3QgZG93bnN0cmVhbXMgPSBnZXREb3duc3RyZWFtTm9kZXMkMShzdG9yZSwgc3RhdGUsIHN0YXRlLmRpcnR5QXRvbXMpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGRvd25zdHJlYW1zKSB7XG4gICAgdmFyIF9nZXROb2RlTWF5YmUsIF9nZXROb2RlTWF5YmUkaW52YWxpZDtcblxuICAgIChfZ2V0Tm9kZU1heWJlID0gZ2V0Tm9kZU1heWJlJDIoa2V5KSkgPT09IG51bGwgfHwgX2dldE5vZGVNYXliZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9nZXROb2RlTWF5YmUkaW52YWxpZCA9IF9nZXROb2RlTWF5YmUuaW52YWxpZGF0ZSkgPT09IG51bGwgfHwgX2dldE5vZGVNYXliZSRpbnZhbGlkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ2V0Tm9kZU1heWJlJGludmFsaWQuY2FsbChfZ2V0Tm9kZU1heWJlLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVjb2lsVmFsdWUoc3RvcmUsIHJlY29pbFZhbHVlLCB2YWx1ZU9yVXBkYXRlcikge1xuICBxdWV1ZU9yUGVyZm9ybVN0YXRlVXBkYXRlKHN0b3JlLCB7XG4gICAgdHlwZTogJ3NldCcsXG4gICAgcmVjb2lsVmFsdWUsXG4gICAgdmFsdWVPclVwZGF0ZXJcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFJlY29pbFZhbHVlTG9hZGFibGUoc3RvcmUsIHJlY29pbFZhbHVlLCBsb2FkYWJsZSkge1xuICBpZiAobG9hZGFibGUgaW5zdGFuY2VvZiBEZWZhdWx0VmFsdWUkMSkge1xuICAgIHJldHVybiBzZXRSZWNvaWxWYWx1ZShzdG9yZSwgcmVjb2lsVmFsdWUsIGxvYWRhYmxlKTtcbiAgfVxuXG4gIHF1ZXVlT3JQZXJmb3JtU3RhdGVVcGRhdGUoc3RvcmUsIHtcbiAgICB0eXBlOiAnc2V0TG9hZGFibGUnLFxuICAgIHJlY29pbFZhbHVlLFxuICAgIGxvYWRhYmxlOiBsb2FkYWJsZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFya1JlY29pbFZhbHVlTW9kaWZpZWQoc3RvcmUsIHJlY29pbFZhbHVlKSB7XG4gIHF1ZXVlT3JQZXJmb3JtU3RhdGVVcGRhdGUoc3RvcmUsIHtcbiAgICB0eXBlOiAnbWFya01vZGlmaWVkJyxcbiAgICByZWNvaWxWYWx1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0VW52YWxpZGF0ZWRSZWNvaWxWYWx1ZShzdG9yZSwgcmVjb2lsVmFsdWUsIHVudmFsaWRhdGVkVmFsdWUpIHtcbiAgcXVldWVPclBlcmZvcm1TdGF0ZVVwZGF0ZShzdG9yZSwge1xuICAgIHR5cGU6ICdzZXRVbnZhbGlkYXRlZCcsXG4gICAgcmVjb2lsVmFsdWUsXG4gICAgdW52YWxpZGF0ZWRWYWx1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3Vic2NyaWJlVG9SZWNvaWxWYWx1ZShzdG9yZSwge1xuICBrZXlcbn0sIGNhbGxiYWNrLCBjb21wb25lbnREZWJ1Z05hbWUgPSBudWxsKSB7XG4gIGNvbnN0IHN1YklEID0gZ2V0TmV4dENvbXBvbmVudElEJDEoKTtcbiAgY29uc3Qgc3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgaWYgKCFzdG9yZVN0YXRlLm5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnMuaGFzKGtleSkpIHtcbiAgICBzdG9yZVN0YXRlLm5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnMuc2V0KGtleSwgbmV3IE1hcCgpKTtcbiAgfVxuXG4gIFJlY29pbF9udWxsdGhyb3dzKHN0b3JlU3RhdGUubm9kZVRvQ29tcG9uZW50U3Vic2NyaXB0aW9ucy5nZXQoa2V5KSkuc2V0KHN1YklELCBbY29tcG9uZW50RGVidWdOYW1lICE9PSBudWxsICYmIGNvbXBvbmVudERlYnVnTmFtZSAhPT0gdm9pZCAwID8gY29tcG9uZW50RGVidWdOYW1lIDogJzxub3QgY2FwdHVyZWQ+JywgY2FsbGJhY2tdKTsgLy8gSGFuZGxlIHRoZSBjYXNlIHRoYXQsIGR1cmluZyB0aGUgc2FtZSB0aWNrIHRoYXQgd2UgYXJlIHN1YnNjcmliaW5nLCBhbiBhdG9tXG4gIC8vIGhhcyBiZWVuIHVwZGF0ZWQgYnkgc29tZSBlZmZlY3QgaGFuZGxlci4gT3RoZXJ3aXNlIHdlIHdpbGwgbWlzcyB0aGUgdXBkYXRlLlxuXG4gIGNvbnN0IG1vZGUgPSByZWFjdE1vZGUkMSgpO1xuXG4gIGlmIChtb2RlLmVhcmx5ICYmIChtb2RlLm1vZGUgPT09ICdMRUdBQ1knIHx8IG1vZGUubW9kZSA9PT0gJ01VVEFCTEVfU09VUkNFJykpIHtcbiAgICBjb25zdCBuZXh0VHJlZSA9IHN0b3JlLmdldFN0YXRlKCkubmV4dFRyZWU7XG5cbiAgICBpZiAobmV4dFRyZWUgJiYgbmV4dFRyZWUuZGlydHlBdG9tcy5oYXMoa2V5KSkge1xuICAgICAgY2FsbGJhY2sobmV4dFRyZWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVsZWFzZTogKCkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZVN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgY29uc3Qgc3VicyA9IHJlbGVhc2VTdG9yZVN0YXRlLm5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnMuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChzdWJzID09PSB1bmRlZmluZWQgfHwgIXN1YnMuaGFzKHN1YklEKSkge1xuICAgICAgICBSZWNvaWxfcmVjb3ZlcmFibGVWaW9sYXRpb24oYFN1YnNjcmlwdGlvbiBtaXNzaW5nIGF0IHJlbGVhc2UgdGltZSBmb3IgYXRvbSAke2tleX0uIFRoaXMgaXMgYSBidWcgaW4gUmVjb2lsLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN1YnMuZGVsZXRlKHN1YklEKTtcblxuICAgICAgaWYgKHN1YnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZWxlYXNlU3RvcmVTdGF0ZS5ub2RlVG9Db21wb25lbnRTdWJzY3JpcHRpb25zLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaFJlY29pbFZhbHVlKHN0b3JlLCByZWNvaWxWYWx1ZSkge1xuICB2YXIgX25vZGUkY2xlYXJDYWNoZTtcblxuICBjb25zdCB7XG4gICAgY3VycmVudFRyZWVcbiAgfSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IG5vZGUgPSBnZXROb2RlJDIocmVjb2lsVmFsdWUua2V5KTtcbiAgKF9ub2RlJGNsZWFyQ2FjaGUgPSBub2RlLmNsZWFyQ2FjaGUpID09PSBudWxsIHx8IF9ub2RlJGNsZWFyQ2FjaGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ub2RlJGNsZWFyQ2FjaGUuY2FsbChub2RlLCBzdG9yZSwgY3VycmVudFRyZWUpO1xufVxuXG52YXIgUmVjb2lsX1JlY29pbFZhbHVlSW50ZXJmYWNlID0ge1xuICBSZWNvaWxWYWx1ZVJlYWRPbmx5OiBSZWNvaWxWYWx1ZVJlYWRPbmx5JDEsXG4gIEFic3RyYWN0UmVjb2lsVmFsdWU6IEFic3RyYWN0UmVjb2lsVmFsdWUkMSxcbiAgUmVjb2lsU3RhdGU6IFJlY29pbFN0YXRlJDEsXG4gIGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZSxcbiAgc2V0UmVjb2lsVmFsdWUsXG4gIHNldFJlY29pbFZhbHVlTG9hZGFibGUsXG4gIG1hcmtSZWNvaWxWYWx1ZU1vZGlmaWVkLFxuICBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlLFxuICBzdWJzY3JpYmVUb1JlY29pbFZhbHVlLFxuICBpc1JlY29pbFZhbHVlOiBpc1JlY29pbFZhbHVlJDEsXG4gIGFwcGx5QXRvbVZhbHVlV3JpdGVzLFxuICAvLyBUT0RPIFJlbW92ZSBleHBvcnQgd2hlbiBkZXByZWNhdGluZyBpbml0aWFsU3RvcmVTdGF0ZV9ERVBSRUNBVEVEIGluIFJlY29pbFJvb3RcbiAgYmF0Y2hTdGFydCxcbiAgd3JpdGVMb2FkYWJsZVRvVHJlZVN0YXRlLFxuICBpbnZhbGlkYXRlRG93bnN0cmVhbXMsXG4gIGNvcHlUcmVlU3RhdGUsXG4gIHJlZnJlc2hSZWNvaWxWYWx1ZSxcbiAgaW52YWxpZGF0ZURvd25zdHJlYW1zX0ZPUl9URVNUSU5HOiBpbnZhbGlkYXRlRG93bnN0cmVhbXNcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuLyoqXG4gKiBUaGUgc29tZVNldCgpIG1ldGhvZCB0ZXN0cyB3aGV0aGVyIHNvbWUgZWxlbWVudHMgaW4gdGhlIGdpdmVuIFNldCBwYXNzIHRoZVxuICogdGVzdCBpbXBsZW1lbnRlZCBieSB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKi9cblxuZnVuY3Rpb24gc29tZVNldChzZXQsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gc2V0LmVudHJpZXMoKTtcbiAgbGV0IGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjdXJyZW50LmRvbmUpIHtcbiAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnQudmFsdWU7XG5cbiAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBlbnRyeVsxXSwgZW50cnlbMF0sIHNldCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBSZWNvaWxfc29tZVNldCA9IHNvbWVTZXQ7XG5cbmNvbnN0IHtcbiAgY2xlYW5VcE5vZGU6IGNsZWFuVXBOb2RlJDFcbn0gPSBSZWNvaWxfRnVuY3Rpb25hbENvcmU7XG5cbmNvbnN0IHtcbiAgZGVsZXRlTm9kZUNvbmZpZ0lmUG9zc2libGU6IGRlbGV0ZU5vZGVDb25maWdJZlBvc3NpYmxlJDEsXG4gIGdldE5vZGU6IGdldE5vZGUkM1xufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIFJldGVudGlvblpvbmU6IFJldGVudGlvblpvbmUkMlxufSA9IFJlY29pbF9SZXRlbnRpb25ab25lO1xuXG5cblxuXG5cblxuXG4gLy8gQ29tcG9uZW50cyB0aGF0IGFyZW4ndCBtb3VudGVkIGFmdGVyIHN1c3BlbmRpbmcgZm9yIHRoaXMgbG9uZyB3aWxsIGJlIGFzc3VtZWRcbi8vIHRvIGJlIGRpc2NhcmRlZCBhbmQgdGhlaXIgcmVzb3VyY2VzIHJlbGVhc2VkLlxuXG5cbmNvbnN0IFNVU1BFTlNFX1RJTUVPVVRfTVMgPSAxMjAwMDA7XG5jb25zdCBlbXB0eVNldCQxID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiByZWxlYXNlUmV0YWluYWJsZXNOb3dPbkN1cnJlbnRUcmVlKHN0b3JlLCByZXRhaW5hYmxlcykge1xuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgdHJlZVN0YXRlID0gc3RvcmVTdGF0ZS5jdXJyZW50VHJlZTtcblxuICBpZiAoc3RvcmVTdGF0ZS5uZXh0VHJlZSkge1xuICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbigncmVsZWFzZU5vZGVzTm93T25DdXJyZW50VHJlZSBzaG91bGQgb25seSBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIGJhdGNoJyk7XG4gICAgcmV0dXJuOyAvLyBsZWFrIG1lbW9yeSByYXRoZXIgdGhhbiBlcmFzZSBzb21ldGhpbmcgdGhhdCdzIGFib3V0IHRvIGJlIHVzZWQuXG4gIH1cblxuICBjb25zdCBub2RlcyA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGNvbnN0IHIgb2YgcmV0YWluYWJsZXMpIHtcbiAgICBpZiAociBpbnN0YW5jZW9mIFJldGVudGlvblpvbmUkMikge1xuICAgICAgZm9yIChjb25zdCBuIG9mIG5vZGVzUmV0YWluZWRCeVpvbmUoc3RvcmVTdGF0ZSwgcikpIHtcbiAgICAgICAgbm9kZXMuYWRkKG4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2Rlcy5hZGQocik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVsZWFzYWJsZU5vZGVzID0gZmluZFJlbGVhc2FibGVOb2RlcyhzdG9yZSwgbm9kZXMpO1xuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiByZWxlYXNhYmxlTm9kZXMpIHtcbiAgICByZWxlYXNlTm9kZShzdG9yZSwgdHJlZVN0YXRlLCBub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kUmVsZWFzYWJsZU5vZGVzKHN0b3JlLCBzZWFyY2hGcm9tTm9kZXMpIHtcbiAgY29uc3Qgc3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gIGNvbnN0IHRyZWVTdGF0ZSA9IHN0b3JlU3RhdGUuY3VycmVudFRyZWU7XG4gIGNvbnN0IGdyYXBoID0gc3RvcmUuZ2V0R3JhcGgodHJlZVN0YXRlLnZlcnNpb24pO1xuICBjb25zdCByZWxlYXNhYmxlTm9kZXMgPSBuZXcgU2V0KCk7IC8vIG11dGF0ZWQgdG8gY29sbGVjdCBhbnN3ZXJcblxuICBjb25zdCBub25SZWxlYXNhYmxlTm9kZXMgPSBuZXcgU2V0KCk7XG4gIGZpbmRSZWxlYXNhYmxlTm9kZXNJbm5lcihzZWFyY2hGcm9tTm9kZXMpO1xuICByZXR1cm4gcmVsZWFzYWJsZU5vZGVzO1xuXG4gIGZ1bmN0aW9uIGZpbmRSZWxlYXNhYmxlTm9kZXNJbm5lcihzZWFyY2hGcm9tTm9kZXMpIHtcbiAgICBjb25zdCByZWxlYXNhYmxlTm9kZXNGb3VuZFRoaXNJdGVyYXRpb24gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZG93bnN0cmVhbXMgPSBnZXREb3duc3RyZWFtTm9kZXNJblRvcG9sb2dpY2FsT3JkZXIoc3RvcmUsIHRyZWVTdGF0ZSwgc2VhcmNoRnJvbU5vZGVzLCByZWxlYXNhYmxlTm9kZXMsIC8vIGRvbid0IGRlc2NlbmQgaW50byB0aGVzZVxuICAgIG5vblJlbGVhc2FibGVOb2RlcyAvLyBkb24ndCBkZXNjZW5kIGludG8gdGhlc2VcbiAgICApOyAvLyBGaW5kIHdoaWNoIG9mIHRoZSBkb3duc3RyZWFtIG5vZGVzIGFyZSByZWxlYXNhYmxlIGFuZCB3aGljaCBhcmUgbm90OlxuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRvd25zdHJlYW1zKSB7XG4gICAgICB2YXIgX3N0b3JlU3RhdGUkcmV0ZW50aW9uO1xuXG4gICAgICAvLyBOb3QgcmVsZWFzYWJsZSBpZiBjb25maWd1cmVkIHRvIGJlIHJldGFpbmVkIGZvcmV2ZXI6XG4gICAgICBpZiAoZ2V0Tm9kZSQzKG5vZGUpLnJldGFpbmVkQnkgPT09ICdyZWNvaWxSb290Jykge1xuICAgICAgICBub25SZWxlYXNhYmxlTm9kZXMuYWRkKG5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gTm90IHJlbGVhc2FibGUgaWYgcmV0YWluZWQgZGlyZWN0bHkgYnkgYSBjb21wb25lbnQ6XG5cblxuICAgICAgaWYgKCgoX3N0b3JlU3RhdGUkcmV0ZW50aW9uID0gc3RvcmVTdGF0ZS5yZXRlbnRpb24ucmVmZXJlbmNlQ291bnRzLmdldChub2RlKSkgIT09IG51bGwgJiYgX3N0b3JlU3RhdGUkcmV0ZW50aW9uICE9PSB2b2lkIDAgPyBfc3RvcmVTdGF0ZSRyZXRlbnRpb24gOiAwKSA+IDApIHtcbiAgICAgICAgbm9uUmVsZWFzYWJsZU5vZGVzLmFkZChub2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIE5vdCByZWxlYXNhYmxlIGlmIHJldGFpbmVkIGJ5IGEgem9uZTpcblxuXG4gICAgICBpZiAoem9uZXNUaGF0Q291bGRSZXRhaW5Ob2RlKG5vZGUpLnNvbWUoeiA9PiBzdG9yZVN0YXRlLnJldGVudGlvbi5yZWZlcmVuY2VDb3VudHMuZ2V0KHopKSkge1xuICAgICAgICBub25SZWxlYXNhYmxlTm9kZXMuYWRkKG5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gTm90IHJlbGVhc2FibGUgaWYgaXQgaGFzIGEgbm9uLXJlbGVhc2FibGUgY2hpbGQgKHdoaWNoIHdpbGwgYWxyZWFkeSBiZSBpblxuICAgICAgLy8gbm9uUmVsZWFzYWJsZU5vZGVzIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIGluIHRvcG9sb2dpY2FsIG9yZGVyKTpcblxuXG4gICAgICBjb25zdCBub2RlQ2hpbGRyZW4gPSBncmFwaC5ub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5nZXQobm9kZSk7XG5cbiAgICAgIGlmIChub2RlQ2hpbGRyZW4gJiYgUmVjb2lsX3NvbWVTZXQobm9kZUNoaWxkcmVuLCBjaGlsZCA9PiBub25SZWxlYXNhYmxlTm9kZXMuaGFzKGNoaWxkKSkpIHtcbiAgICAgICAgbm9uUmVsZWFzYWJsZU5vZGVzLmFkZChub2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlbGVhc2FibGVOb2Rlcy5hZGQobm9kZSk7XG4gICAgICByZWxlYXNhYmxlTm9kZXNGb3VuZFRoaXNJdGVyYXRpb24uYWRkKG5vZGUpO1xuICAgIH0gLy8gSWYgd2UgZm91bmQgYW55IHJlbGVhc2FibGUgbm9kZXMsIHdlIG5lZWQgdG8gd2FsayBVUCBmcm9tIHRob3NlIG5vZGVzIHRvXG4gICAgLy8gZmluZCB3aGV0aGVyIHRoZWlyIHBhcmVudHMgY2FuIG5vdyBiZSByZWxlYXNlZCBhcyB3ZWxsOlxuXG5cbiAgICBjb25zdCBwYXJlbnRzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHJlbGVhc2FibGVOb2Rlc0ZvdW5kVGhpc0l0ZXJhdGlvbikge1xuICAgICAgZm9yIChjb25zdCBwYXJlbnQgb2YgKF9ncmFwaCRub2RlRGVwcyRnZXQgPSBncmFwaC5ub2RlRGVwcy5nZXQobm9kZSkpICE9PSBudWxsICYmIF9ncmFwaCRub2RlRGVwcyRnZXQgIT09IHZvaWQgMCA/IF9ncmFwaCRub2RlRGVwcyRnZXQgOiBlbXB0eVNldCQxKSB7XG4gICAgICAgIHZhciBfZ3JhcGgkbm9kZURlcHMkZ2V0O1xuXG4gICAgICAgIGlmICghcmVsZWFzYWJsZU5vZGVzLmhhcyhwYXJlbnQpKSB7XG4gICAgICAgICAgcGFyZW50cy5hZGQocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJlbnRzLnNpemUpIHtcbiAgICAgIGZpbmRSZWxlYXNhYmxlTm9kZXNJbm5lcihwYXJlbnRzKTtcbiAgICB9XG4gIH1cbn0gLy8gQ2hpbGRyZW4gYmVmb3JlIHBhcmVudHNcblxuXG5mdW5jdGlvbiBnZXREb3duc3RyZWFtTm9kZXNJblRvcG9sb2dpY2FsT3JkZXIoc3RvcmUsIHRyZWVTdGF0ZSwgbm9kZXMsIC8vIE11dGFibGUgc2V0IGlzIGRlc3Ryb3llZCBpbiBwbGFjZVxuZG9Ob3REZXNjZW5kSW50bzEsIGRvTm90RGVzY2VuZEludG8yKSB7XG4gIGNvbnN0IGdyYXBoID0gc3RvcmUuZ2V0R3JhcGgodHJlZVN0YXRlLnZlcnNpb24pO1xuICBjb25zdCBhbnN3ZXIgPSBbXTtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQoKTtcblxuICB3aGlsZSAobm9kZXMuc2l6ZSA+IDApIHtcbiAgICB2aXNpdChSZWNvaWxfbnVsbHRocm93cyhub2Rlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiBhbnN3ZXI7XG5cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIGlmIChkb05vdERlc2NlbmRJbnRvMS5oYXMobm9kZSkgfHwgZG9Ob3REZXNjZW5kSW50bzIuaGFzKG5vZGUpKSB7XG4gICAgICBub2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZpc2l0ZWQuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5ub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5nZXQobm9kZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgdmlzaXQoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgIG5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICBhbnN3ZXIucHVzaChub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWxlYXNlTm9kZShzdG9yZSwgdHJlZVN0YXRlLCBub2RlKSB7XG4gIGlmICghUmVjb2lsX2dreCgncmVjb2lsX21lbW9yeV9tYW5hZ2FtZW50XzIwMjAnKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBBdG9tIGVmZmVjdHMsIGluLWNsb3N1cmUgY2FjaGVzLCBldGMuOlxuXG5cbiAgY2xlYW5VcE5vZGUkMShzdG9yZSwgbm9kZSk7IC8vIERlbGV0ZSBmcm9tIHN0b3JlIHN0YXRlOlxuXG4gIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBzdG9yZVN0YXRlLmtub3duQXRvbXMuZGVsZXRlKG5vZGUpO1xuICBzdG9yZVN0YXRlLmtub3duU2VsZWN0b3JzLmRlbGV0ZShub2RlKTtcbiAgc3RvcmVTdGF0ZS5ub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zLmRlbGV0ZShub2RlKTtcbiAgc3RvcmVTdGF0ZS5yZXRlbnRpb24ucmVmZXJlbmNlQ291bnRzLmRlbGV0ZShub2RlKTtcbiAgY29uc3Qgem9uZXMgPSB6b25lc1RoYXRDb3VsZFJldGFpbk5vZGUobm9kZSk7XG5cbiAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVzKSB7XG4gICAgdmFyIF9zdG9yZVN0YXRlJHJldGVudGlvbjI7XG5cbiAgICAoX3N0b3JlU3RhdGUkcmV0ZW50aW9uMiA9IHN0b3JlU3RhdGUucmV0ZW50aW9uLm5vZGVzUmV0YWluZWRCeVpvbmUuZ2V0KHpvbmUpKSA9PT0gbnVsbCB8fCBfc3RvcmVTdGF0ZSRyZXRlbnRpb24yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RvcmVTdGF0ZSRyZXRlbnRpb24yLmRlbGV0ZShub2RlKTtcbiAgfSAvLyBOb3RlIHRoYXQgd2UgRE8gTk9UIGRlbGV0ZSBmcm9tIG5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnMgYmVjYXVzZSB0aGlzXG4gIC8vIGFscmVhZHkgaGFwcGVucyB3aGVuIHRoZSBsYXN0IGNvbXBvbmVudCB0aGF0IHdhcyByZXRhaW5pbmcgdGhlIG5vZGUgdW5tb3VudHMsXG4gIC8vIGFuZCB0aGlzIGNvdWxkIGhhcHBlbiBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoYXQuXG4gIC8vIERlbGV0ZSBmcm9tIFRyZWVTdGF0ZSBhbmQgZGVwIGdyYXBoOlxuXG5cbiAgdHJlZVN0YXRlLmF0b21WYWx1ZXMuZGVsZXRlKG5vZGUpO1xuICB0cmVlU3RhdGUuZGlydHlBdG9tcy5kZWxldGUobm9kZSk7XG4gIHRyZWVTdGF0ZS5ub252YWxpZGF0ZWRBdG9tcy5kZWxldGUobm9kZSk7XG4gIGNvbnN0IGdyYXBoID0gc3RvcmVTdGF0ZS5ncmFwaHNCeVZlcnNpb24uZ2V0KHRyZWVTdGF0ZS52ZXJzaW9uKTtcblxuICBpZiAoZ3JhcGgpIHtcbiAgICBjb25zdCBkZXBzID0gZ3JhcGgubm9kZURlcHMuZ2V0KG5vZGUpO1xuXG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZ3JhcGgubm9kZURlcHMuZGVsZXRlKG5vZGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICAgIHZhciBfZ3JhcGgkbm9kZVRvTm9kZVN1YnM7XG5cbiAgICAgICAgKF9ncmFwaCRub2RlVG9Ob2RlU3VicyA9IGdyYXBoLm5vZGVUb05vZGVTdWJzY3JpcHRpb25zLmdldChkZXApKSA9PT0gbnVsbCB8fCBfZ3JhcGgkbm9kZVRvTm9kZVN1YnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ncmFwaCRub2RlVG9Ob2RlU3Vicy5kZWxldGUobm9kZSk7XG4gICAgICB9XG4gICAgfSAvLyBObyBuZWVkIHRvIGRlbGV0ZSBzdWIncyBkZXBzIGFzIHRoZXJlIHNob3VsZCBiZSBubyBzdWJzIGF0IHRoaXMgcG9pbnQuXG4gICAgLy8gQnV0IGFuIGludmFyaWFudCB3b3VsZCByZXF1aXJlIGRlbGV0aW5nIG5vZGVzIGluIHRvcG9sb2dpY2FsIG9yZGVyLlxuXG5cbiAgICBncmFwaC5ub2RlVG9Ob2RlU3Vic2NyaXB0aW9ucy5kZWxldGUobm9kZSk7XG4gIH0gLy8gTm9kZSBjb25maWcgKGZvciBmYW1pbHkgbWVtYmVycyBvbmx5IGFzIHRoZWlyIGNvbmZpZ3MgY2FuIGJlIHJlY3JlYXRlZCwgYW5kXG4gIC8vIG9ubHkgaWYgdGhleSBhcmUgbm90IHJldGFpbmVkIHdpdGhpbiBhbnkgb3RoZXIgU3RvcmVzKTpcblxuXG4gIGRlbGV0ZU5vZGVDb25maWdJZlBvc3NpYmxlJDEobm9kZSk7XG59XG5cbmZ1bmN0aW9uIG5vZGVzUmV0YWluZWRCeVpvbmUoc3RvcmVTdGF0ZSwgem9uZSkge1xuICB2YXIgX3N0b3JlU3RhdGUkcmV0ZW50aW9uMztcblxuICByZXR1cm4gKF9zdG9yZVN0YXRlJHJldGVudGlvbjMgPSBzdG9yZVN0YXRlLnJldGVudGlvbi5ub2Rlc1JldGFpbmVkQnlab25lLmdldCh6b25lKSkgIT09IG51bGwgJiYgX3N0b3JlU3RhdGUkcmV0ZW50aW9uMyAhPT0gdm9pZCAwID8gX3N0b3JlU3RhdGUkcmV0ZW50aW9uMyA6IGVtcHR5U2V0JDE7XG59XG5cbmZ1bmN0aW9uIHpvbmVzVGhhdENvdWxkUmV0YWluTm9kZShub2RlKSB7XG4gIGNvbnN0IHJldGFpbmVkQnkgPSBnZXROb2RlJDMobm9kZSkucmV0YWluZWRCeTtcblxuICBpZiAocmV0YWluZWRCeSA9PT0gdW5kZWZpbmVkIHx8IHJldGFpbmVkQnkgPT09ICdjb21wb25lbnRzJyB8fCByZXRhaW5lZEJ5ID09PSAncmVjb2lsUm9vdCcpIHtcbiAgICByZXR1cm4gW107XG4gIH0gZWxzZSBpZiAocmV0YWluZWRCeSBpbnN0YW5jZW9mIFJldGVudGlvblpvbmUkMikge1xuICAgIHJldHVybiBbcmV0YWluZWRCeV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJldGFpbmVkQnk7IC8vIGl0J3MgYW4gYXJyYXkgb2Ygem9uZXNcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZU9yUGVyZm9ybVBvc3NpYmxlUmVsZWFzZU9mUmV0YWluYWJsZShzdG9yZSwgcmV0YWluYWJsZSkge1xuICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgaWYgKHN0YXRlLm5leHRUcmVlKSB7XG4gICAgc3RhdGUucmV0ZW50aW9uLnJldGFpbmFibGVzVG9DaGVja0ZvclJlbGVhc2UuYWRkKHJldGFpbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIHJlbGVhc2VSZXRhaW5hYmxlc05vd09uQ3VycmVudFRyZWUoc3RvcmUsIG5ldyBTZXQoW3JldGFpbmFibGVdKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUmV0YWluQ291bnQoc3RvcmUsIHJldGFpbmFibGUsIGRlbHRhKSB7XG4gIHZhciBfbWFwJGdldDtcblxuICBpZiAoIVJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXAgPSBzdG9yZS5nZXRTdGF0ZSgpLnJldGVudGlvbi5yZWZlcmVuY2VDb3VudHM7XG4gIGNvbnN0IG5ld0NvdW50ID0gKChfbWFwJGdldCA9IG1hcC5nZXQocmV0YWluYWJsZSkpICE9PSBudWxsICYmIF9tYXAkZ2V0ICE9PSB2b2lkIDAgPyBfbWFwJGdldCA6IDApICsgZGVsdGE7XG5cbiAgaWYgKG5ld0NvdW50ID09PSAwKSB7XG4gICAgdXBkYXRlUmV0YWluQ291bnRUb1plcm8oc3RvcmUsIHJldGFpbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIG1hcC5zZXQocmV0YWluYWJsZSwgbmV3Q291bnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJldGFpbkNvdW50VG9aZXJvKHN0b3JlLCByZXRhaW5hYmxlKSB7XG4gIGlmICghUmVjb2lsX2dreCgncmVjb2lsX21lbW9yeV9tYW5hZ2FtZW50XzIwMjAnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1hcCA9IHN0b3JlLmdldFN0YXRlKCkucmV0ZW50aW9uLnJlZmVyZW5jZUNvdW50cztcbiAgbWFwLmRlbGV0ZShyZXRhaW5hYmxlKTtcbiAgc2NoZWR1bGVPclBlcmZvcm1Qb3NzaWJsZVJlbGVhc2VPZlJldGFpbmFibGUoc3RvcmUsIHJldGFpbmFibGUpO1xufVxuXG5mdW5jdGlvbiByZWxlYXNlU2NoZWR1bGVkUmV0YWluYWJsZXNOb3coc3RvcmUpIHtcbiAgaWYgKCFSZWNvaWxfZ2t4KCdyZWNvaWxfbWVtb3J5X21hbmFnYW1lbnRfMjAyMCcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICByZWxlYXNlUmV0YWluYWJsZXNOb3dPbkN1cnJlbnRUcmVlKHN0b3JlLCBzdGF0ZS5yZXRlbnRpb24ucmV0YWluYWJsZXNUb0NoZWNrRm9yUmVsZWFzZSk7XG4gIHN0YXRlLnJldGVudGlvbi5yZXRhaW5hYmxlc1RvQ2hlY2tGb3JSZWxlYXNlLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIHJldGFpbmVkQnlPcHRpb25XaXRoRGVmYXVsdChyKSB7XG4gIC8vIFRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIGZyb20gJ3JlY29pbFJvb3QnIHRvICdjb21wb25lbnRzJyBpbiB0aGUgZnV0dXJlLlxuICByZXR1cm4gciA9PT0gdW5kZWZpbmVkID8gJ3JlY29pbFJvb3QnIDogcjtcbn1cblxudmFyIFJlY29pbF9SZXRlbnRpb24gPSB7XG4gIFNVU1BFTlNFX1RJTUVPVVRfTVMsXG4gIHVwZGF0ZVJldGFpbkNvdW50LFxuICB1cGRhdGVSZXRhaW5Db3VudFRvWmVybyxcbiAgcmVsZWFzZVNjaGVkdWxlZFJldGFpbmFibGVzTm93LFxuICByZXRhaW5lZEJ5T3B0aW9uV2l0aERlZmF1bHRcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqXG4gKiBUaGlzIGlzIHRvIGV4cG9ydCBlc3N0aWVudGlhbCBmdW5jdGlvbnMgZnJvbSByZWFjdC1kb21cbiAqIGZvciBvdXIgd2ViIGJ1aWxkXG4gKi9cbmNvbnN0IHtcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXNcbn0gPSByZWFjdERvbTtcblxudmFyIFJlYWN0QmF0Y2hlZFVwZGF0ZXMgPSB7XG4gIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzXG59O1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKlxuICogVGhpcyBpcyB0byBleHBvcnQgZXNzdGllbnRpYWwgZnVuY3Rpb25zIGZyb20gcmVhY3QtZG9tXG4gKiBmb3Igb3VyIHdlYiBidWlsZFxuICovXG4vLyBAZmItb25seTogY29uc3Qge3Vuc3RhYmxlX2JhdGNoZWRVcGRhdGVzfSA9IHJlcXVpcmUoJ1JlYWN0RE9NQ29tZXQnKTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3Qge1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczogdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMkMVxufSA9IFJlYWN0QmF0Y2hlZFVwZGF0ZXM7IC8vIEBvc3Mtb25seVxuXG5cbnZhciBSZWNvaWxfUmVhY3RCYXRjaGVkVXBkYXRlcyA9IHtcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzJDFcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuY29uc3Qge1xuICBiYXRjaFN0YXJ0OiBiYXRjaFN0YXJ0JDFcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2U7XG5cbmNvbnN0IHtcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzJDJcbn0gPSBSZWNvaWxfUmVhY3RCYXRjaGVkVXBkYXRlcztcblxubGV0IGJhdGNoZXIgPSB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyQyOyAvLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuXG4vKipcbiAqIFNldHMgdGhlIHByb3ZpZGVkIGJhdGNoZXIgZnVuY3Rpb24gYXMgdGhlIGJhdGNoZXIgZnVuY3Rpb24gdXNlZCBieSBSZWNvaWwuXG4gKlxuICogU2V0IHRoZSBiYXRjaGVyIHRvIGEgY3VzdG9tIGJhdGNoZXIgZm9yIHlvdXIgcmVuZGVyZXIsXG4gKiBpZiB5b3UgdXNlIGEgcmVuZGVyZXIgb3RoZXIgdGhhbiBSZWFjdCBET00gb3IgUmVhY3QgTmF0aXZlLlxuICovXG5jb25zdCBzZXRCYXRjaGVyID0gbmV3QmF0Y2hlciA9PiB7XG4gIGJhdGNoZXIgPSBuZXdCYXRjaGVyO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBiYXRjaGVyIGZ1bmN0aW9uLlxuICovXG5cblxuY29uc3QgZ2V0QmF0Y2hlciA9ICgpID0+IGJhdGNoZXI7XG4vKipcbiAqIENhbGxzIHRoZSBjdXJyZW50IGJhdGNoZXIgZnVuY3Rpb24gYW5kIHBhc3NlcyB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cblxuY29uc3QgYmF0Y2hVcGRhdGVzID0gY2FsbGJhY2sgPT4ge1xuICBiYXRjaGVyKCgpID0+IHtcbiAgICBsZXQgYmF0Y2hFbmQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgYmF0Y2hFbmQgPSBiYXRjaFN0YXJ0JDEoKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJhdGNoRW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBSZWNvaWxfQmF0Y2hpbmcgPSB7XG4gIGdldEJhdGNoZXIsXG4gIHNldEJhdGNoZXIsXG4gIGJhdGNoVXBkYXRlc1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIEl0ZXJhYmxlcyBpbnRvIGEgc2luZ2xlIEl0ZXJhYmxlLlxuICogVHJhdmVyc2VzIHRoZSBpbnB1dCBJdGVyYWJsZXMgaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGFuZCBtYWludGFpbnMgdGhlIG9yZGVyXG4gKiBvZiB0aGVpciBlbGVtZW50cy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiBjb25zdCByID0gQXJyYXkuZnJvbShjb25jYXRJdGVyYWJsZXMoWydhJywgJ2InXSwgWydjJ10sIFsnZCcsICdlJywgJ2YnXSkpO1xuICogciA9PSBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJ107XG4gKiBgYGBcbiAqL1xuXG5mdW5jdGlvbiogY29uY2F0SXRlcmFibGVzKGl0ZXJzKSB7XG4gIGZvciAoY29uc3QgaXRlciBvZiBpdGVycykge1xuICAgIGZvciAoY29uc3QgdmFsIG9mIGl0ZXIpIHtcbiAgICAgIHlpZWxkIHZhbDtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlY29pbF9jb25jYXRJdGVyYWJsZXMgPSBjb25jYXRJdGVyYWJsZXM7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5jb25zdCBpc1NTUiA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuY29uc3QgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZiLXd3dy90eXBlb2YtdW5kZWZpbmVkXG5cbnZhciBSZWNvaWxfRW52aXJvbm1lbnQgPSB7XG4gIGlzU1NSLFxuICBpc1JlYWN0TmF0aXZlXG59O1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cbi8qKlxuICogQ2FjaGVzIGEgZnVuY3Rpb24ncyByZXN1bHRzIGJhc2VkIG9uIHRoZSBrZXkgcmV0dXJuZWQgYnkgdGhlIHBhc3NlZFxuICogaGFzaEZ1bmN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIG1lbW9pemVXaXRoQXJnc0hhc2goZm4sIGhhc2hGdW5jdGlvbikge1xuICBsZXQgY2FjaGU7XG5cbiAgY29uc3QgbWVtb2l6ZWRGbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgY2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBoYXNoRnVuY3Rpb24oLi4uYXJncyk7XG5cbiAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNhY2hlLCBrZXkpKSB7XG4gICAgICBjYWNoZVtrZXldID0gZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW2tleV07XG4gIH07XG5cbiAgcmV0dXJuIG1lbW9pemVkRm47XG59XG4vKipcbiAqIENhY2hlcyBhIGZ1bmN0aW9uJ3MgcmVzdWx0cyBiYXNlZCBvbiBhIGNvbXBhcmlzb24gb2YgdGhlIGFyZ3VtZW50cy5cbiAqIE9ubHkgY2FjaGVzIHRoZSBsYXN0IHJldHVybiBvZiB0aGUgZnVuY3Rpb24uXG4gKiBEZWZhdWx0cyB0byByZWZlcmVuY2UgZXF1YWxpdHlcbiAqL1xuXG5cbmZ1bmN0aW9uIG1lbW9pemVPbmVXaXRoQXJnc0hhc2goZm4sIGhhc2hGdW5jdGlvbikge1xuICBsZXQgbGFzdEtleTtcbiAgbGV0IGxhc3RSZXN1bHQ7IC8vIGJyZWFraW5nIGNhY2hlIHdoZW4gYXJndW1lbnRzIGNoYW5nZVxuXG4gIGNvbnN0IG1lbW9pemVkRm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGhhc2hGdW5jdGlvbiguLi5hcmdzKTtcblxuICAgIGlmIChsYXN0S2V5ID09PSBrZXkpIHtcbiAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cblxuICAgIGxhc3RLZXkgPSBrZXk7XG4gICAgbGFzdFJlc3VsdCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICB9O1xuXG4gIHJldHVybiBtZW1vaXplZEZuO1xufVxuLyoqXG4gKiBDYWNoZXMgYSBmdW5jdGlvbidzIHJlc3VsdHMgYmFzZWQgb24gYSBjb21wYXJpc29uIG9mIHRoZSBhcmd1bWVudHMuXG4gKiBPbmx5IGNhY2hlcyB0aGUgbGFzdCByZXR1cm4gb2YgdGhlIGZ1bmN0aW9uLlxuICogRGVmYXVsdHMgdG8gcmVmZXJlbmNlIGVxdWFsaXR5XG4gKi9cblxuXG5mdW5jdGlvbiBtZW1vaXplT25lV2l0aEFyZ3NIYXNoQW5kSW52YWxpZGF0aW9uKGZuLCBoYXNoRnVuY3Rpb24pIHtcbiAgbGV0IGxhc3RLZXk7XG4gIGxldCBsYXN0UmVzdWx0OyAvLyBicmVha2luZyBjYWNoZSB3aGVuIGFyZ3VtZW50cyBjaGFuZ2VcblxuICBjb25zdCBtZW1vaXplZEZuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBrZXkgPSBoYXNoRnVuY3Rpb24oLi4uYXJncyk7XG5cbiAgICBpZiAobGFzdEtleSA9PT0ga2V5KSB7XG4gICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG5cbiAgICBsYXN0S2V5ID0ga2V5O1xuICAgIGxhc3RSZXN1bHQgPSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgfTtcblxuICBjb25zdCBpbnZhbGlkYXRlID0gKCkgPT4ge1xuICAgIGxhc3RLZXkgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBbbWVtb2l6ZWRGbiwgaW52YWxpZGF0ZV07XG59XG5cbnZhciBSZWNvaWxfTWVtb2l6ZSA9IHtcbiAgbWVtb2l6ZVdpdGhBcmdzSGFzaCxcbiAgbWVtb2l6ZU9uZVdpdGhBcmdzSGFzaCxcbiAgbWVtb2l6ZU9uZVdpdGhBcmdzSGFzaEFuZEludmFsaWRhdGlvblxufTtcblxuY29uc3Qge1xuICBiYXRjaFVwZGF0ZXM6IGJhdGNoVXBkYXRlcyQxXG59ID0gUmVjb2lsX0JhdGNoaW5nO1xuXG5jb25zdCB7XG4gIGluaXRpYWxpemVOb2RlOiBpbml0aWFsaXplTm9kZSQxLFxuICBwZWVrTm9kZUluZm86IHBlZWtOb2RlSW5mbyQxXG59ID0gUmVjb2lsX0Z1bmN0aW9uYWxDb3JlO1xuXG5jb25zdCB7XG4gIGdyYXBoOiBncmFwaCQxXG59ID0gUmVjb2lsX0dyYXBoO1xuXG5jb25zdCB7XG4gIGdldE5leHRTdG9yZUlEOiBnZXROZXh0U3RvcmVJRCQxXG59ID0gUmVjb2lsX0tleXM7XG5cbmNvbnN0IHtcbiAgREVGQVVMVF9WQUxVRTogREVGQVVMVF9WQUxVRSQxLFxuICByZWNvaWxWYWx1ZXM6IHJlY29pbFZhbHVlcyQxLFxuICByZWNvaWxWYWx1ZXNGb3JLZXlzOiByZWNvaWxWYWx1ZXNGb3JLZXlzJDJcbn0gPSBSZWNvaWxfTm9kZTtcblxuY29uc3Qge1xuICBBYnN0cmFjdFJlY29pbFZhbHVlOiBBYnN0cmFjdFJlY29pbFZhbHVlJDIsXG4gIGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZTogZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDEsXG4gIHNldFJlY29pbFZhbHVlOiBzZXRSZWNvaWxWYWx1ZSQxLFxuICBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlOiBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlJDFcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2U7XG5cbmNvbnN0IHtcbiAgdXBkYXRlUmV0YWluQ291bnQ6IHVwZGF0ZVJldGFpbkNvdW50JDFcbn0gPSBSZWNvaWxfUmV0ZW50aW9uO1xuXG5jb25zdCB7XG4gIGdldE5leHRUcmVlU3RhdGVWZXJzaW9uOiBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQyLFxuICBtYWtlRW1wdHlTdG9yZVN0YXRlOiBtYWtlRW1wdHlTdG9yZVN0YXRlJDFcbn0gPSBSZWNvaWxfU3RhdGU7XG5cblxuXG5jb25zdCB7XG4gIGlzU1NSOiBpc1NTUiQxXG59ID0gUmVjb2lsX0Vudmlyb25tZW50O1xuXG5cblxuXG5cblxuXG5cblxuY29uc3Qge1xuICBtZW1vaXplT25lV2l0aEFyZ3NIYXNoQW5kSW52YWxpZGF0aW9uOiBtZW1vaXplT25lV2l0aEFyZ3NIYXNoQW5kSW52YWxpZGF0aW9uJDFcbn0gPSBSZWNvaWxfTWVtb2l6ZTtcblxuXG5cbiAvLyBPcGFxdWUgYXQgdGhpcyBzdXJmYWNlIGJlY2F1c2UgaXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIGZyb20gaGVyZS5cblxuXG5jb25zdCByZXRhaW5XYXJuaW5nID0gYFxuUmVjb2lsIFNuYXBzaG90cyBvbmx5IGxhc3QgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbGJhY2sgdGhleSBhcmUgcHJvdmlkZWQgdG8uIFRvIGtlZXAgYSBTbmFwc2hvdCBsb25nZXIsIGRvIHRoaXM6XG5cbiAgY29uc3QgcmVsZWFzZSA9IHNuYXBzaG90LnJldGFpbigpO1xuICB0cnkge1xuICAgIGF3YWl0IGRvU29tZXRoaW5nV2l0aFNuYXBzaG90KHNuYXBzaG90KTtcbiAgfSBmaW5hbGx5IHtcbiAgICByZWxlYXNlKCk7XG4gIH1cblxuVGhpcyBpcyBjdXJyZW50bHkgYSBERVYtb25seSB3YXJuaW5nIGJ1dCB3aWxsIGJlY29tZSBhIHRocm93biBleGNlcHRpb24gaW4gdGhlIG5leHQgcmVsZWFzZSBvZiBSZWNvaWwuXG5gOyAvLyBBIFwiU25hcHNob3RcIiBpcyBcInJlYWQtb25seVwiIGFuZCBjYXB0dXJlcyBhIHNwZWNpZmljIHNldCBvZiB2YWx1ZXMgb2YgYXRvbXMuXG4vLyBIb3dldmVyLCB0aGUgZGF0YS1mbG93LWdyYXBoIGFuZCBzZWxlY3RvciB2YWx1ZXMgbWF5IGV2b2x2ZSBhcyBzZWxlY3RvclxuLy8gZXZhbHVhdGlvbiBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGFuZCBhc3luYyBzZWxlY3RvcnMgcmVzb2x2ZS5cblxuY2xhc3MgU25hcHNob3Qge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L25vLXVuaW5pdGlhbGl6ZWQtcHJvcGVydGllc1xuICBjb25zdHJ1Y3RvcihzdG9yZVN0YXRlKSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX3N0b3JlXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfcmVmQ291bnRcIiwgMSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRMb2FkYWJsZVwiLCByZWNvaWxWYWx1ZSA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVmQ291bnRfSU5URVJOQUwoKTtcbiAgICAgIHJldHVybiBnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGUkMSh0aGlzLl9zdG9yZSwgcmVjb2lsVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0UHJvbWlzZVwiLCByZWNvaWxWYWx1ZSA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVmQ291bnRfSU5URVJOQUwoKTtcbiAgICAgIHJldHVybiB0aGlzLmdldExvYWRhYmxlKHJlY29pbFZhbHVlKS50b1Byb21pc2UoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldE5vZGVzX1VOU1RBQkxFXCIsIG9wdCA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVmQ291bnRfSU5URVJOQUwoKTsgLy8gVE9ETyBEZWFsIHdpdGggbW9kaWZpZWQgc2VsZWN0b3JzXG5cbiAgICAgIGlmICgob3B0ID09PSBudWxsIHx8IG9wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0LmlzTW9kaWZpZWQpID09PSB0cnVlKSB7XG4gICAgICAgIGlmICgob3B0ID09PSBudWxsIHx8IG9wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0LmlzSW5pdGlhbGl6ZWQpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5jdXJyZW50VHJlZTtcblxuICAgICAgICByZXR1cm4gcmVjb2lsVmFsdWVzRm9yS2V5cyQyKHN0YXRlLmRpcnR5QXRvbXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrbm93bkF0b21zID0gdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5rbm93bkF0b21zO1xuXG4gICAgICBjb25zdCBrbm93blNlbGVjdG9ycyA9IHRoaXMuX3N0b3JlLmdldFN0YXRlKCkua25vd25TZWxlY3RvcnM7XG5cbiAgICAgIHJldHVybiAob3B0ID09PSBudWxsIHx8IG9wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0LmlzSW5pdGlhbGl6ZWQpID09IG51bGwgPyByZWNvaWxWYWx1ZXMkMS52YWx1ZXMoKSA6IG9wdC5pc0luaXRpYWxpemVkID09PSB0cnVlID8gcmVjb2lsVmFsdWVzRm9yS2V5cyQyKFJlY29pbF9jb25jYXRJdGVyYWJsZXMoW3RoaXMuX3N0b3JlLmdldFN0YXRlKCkua25vd25BdG9tcywgdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5rbm93blNlbGVjdG9yc10pKSA6IFJlY29pbF9maWx0ZXJJdGVyYWJsZShyZWNvaWxWYWx1ZXMkMS52YWx1ZXMoKSwgKHtcbiAgICAgICAga2V5XG4gICAgICB9KSA9PiAha25vd25BdG9tcy5oYXMoa2V5KSAmJiAha25vd25TZWxlY3RvcnMuaGFzKGtleSkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0SW5mb19VTlNUQUJMRVwiLCAoe1xuICAgICAga2V5XG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1JlZkNvdW50X0lOVEVSTkFMKCk7IC8vICRGbG93Rml4TWVbZXNjYXBlZC1nZW5lcmljXVxuXG4gICAgICByZXR1cm4gcGVla05vZGVJbmZvJDEodGhpcy5fc3RvcmUsIHRoaXMuX3N0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWUsIGtleSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtYXBcIiwgbWFwcGVyID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZWZDb3VudF9JTlRFUk5BTCgpO1xuICAgICAgY29uc3QgbXV0YWJsZVNuYXBzaG90ID0gbmV3IE11dGFibGVTbmFwc2hvdCh0aGlzLCBiYXRjaFVwZGF0ZXMkMSk7XG4gICAgICBtYXBwZXIobXV0YWJsZVNuYXBzaG90KTsgLy8gaWYgcmVtb3ZpbmcgYmF0Y2hVcGRhdGVzIGZyb20gYHNldGAgYWRkIGl0IGhlcmVcblxuICAgICAgcmV0dXJuIG11dGFibGVTbmFwc2hvdDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFzeW5jTWFwXCIsIGFzeW5jIG1hcHBlciA9PiB7XG4gICAgICB0aGlzLmNoZWNrUmVmQ291bnRfSU5URVJOQUwoKTtcbiAgICAgIGNvbnN0IG11dGFibGVTbmFwc2hvdCA9IG5ldyBNdXRhYmxlU25hcHNob3QodGhpcywgYmF0Y2hVcGRhdGVzJDEpO1xuICAgICAgbXV0YWJsZVNuYXBzaG90LnJldGFpbigpOyAvLyBSZXRhaW4gbmV3IHNuYXBzaG90IGR1cmluZyBhc3luYyBtYXBwZXJcblxuICAgICAgYXdhaXQgbWFwcGVyKG11dGFibGVTbmFwc2hvdCk7IC8vIENvbnRpbnVlIHRvIHJldGFpbiB0aGUgbmV3IHNuYXBzaG90IGZvciB0aGUgdXNlciwgYnV0IGF1dG8tcmVsZWFzZSBpdFxuICAgICAgLy8gYWZ0ZXIgdGhlIG5leHQgdGljaywgdGhlIHNhbWUgYXMgYSBuZXcgc3luY2hyb25vdXMgc25hcHNob3QuXG5cbiAgICAgIG11dGFibGVTbmFwc2hvdC5hdXRvUmVsZWFzZV9JTlRFUk5BTCgpO1xuICAgICAgcmV0dXJuIG11dGFibGVTbmFwc2hvdDtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N0b3JlID0ge1xuICAgICAgc3RvcmVJRDogZ2V0TmV4dFN0b3JlSUQkMSgpLFxuICAgICAgZ2V0U3RhdGU6ICgpID0+IHN0b3JlU3RhdGUsXG4gICAgICByZXBsYWNlU3RhdGU6IHJlcGxhY2VyID0+IHtcbiAgICAgICAgc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSA9IHJlcGxhY2VyKHN0b3JlU3RhdGUuY3VycmVudFRyZWUpOyAvLyBubyBiYXRjaGluZyBzbyBuZXh0VHJlZSBpcyBuZXZlciBhY3RpdmVcbiAgICAgIH0sXG4gICAgICBnZXRHcmFwaDogdmVyc2lvbiA9PiB7XG4gICAgICAgIGNvbnN0IGdyYXBocyA9IHN0b3JlU3RhdGUuZ3JhcGhzQnlWZXJzaW9uO1xuXG4gICAgICAgIGlmIChncmFwaHMuaGFzKHZlcnNpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIFJlY29pbF9udWxsdGhyb3dzKGdyYXBocy5nZXQodmVyc2lvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3R3JhcGggPSBncmFwaCQxKCk7XG4gICAgICAgIGdyYXBocy5zZXQodmVyc2lvbiwgbmV3R3JhcGgpO1xuICAgICAgICByZXR1cm4gbmV3R3JhcGg7XG4gICAgICB9LFxuICAgICAgc3Vic2NyaWJlVG9UcmFuc2FjdGlvbnM6ICgpID0+ICh7XG4gICAgICAgIHJlbGVhc2U6ICgpID0+IHt9XG4gICAgICB9KSxcbiAgICAgIGFkZFRyYW5zYWN0aW9uTWV0YWRhdGE6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2VycignQ2Fubm90IHN1YnNjcmliZSB0byBTbmFwc2hvdHMnKTtcbiAgICAgIH1cbiAgICB9OyAvLyBJbml0aWFsaXplIGFueSBub2RlcyB0aGF0IGFyZSBsaXZlIGluIHRoZSBwYXJlbnQgc3RvcmUgKHByaW1hcmlseSBzbyB0aGF0XG4gICAgLy8gdGhpcyBzbmFwc2hvdCBnZXRzIGNvdW50ZWQgdG93YXJkcyB0aGUgbm9kZSdzIGxpdmUgc3RvcmVzIGNvdW50KS5cbiAgICAvLyBUT0RPIE9wdGltaXplIHRoaXMgd2hlbiBjbG9uaW5nIHNuYXBzaG90cyBmb3IgY2FsbGJhY2tzXG5cbiAgICBmb3IgKGNvbnN0IG5vZGVLZXkgb2YgdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5rbm93bkF0b21zKSB7XG4gICAgICBpbml0aWFsaXplTm9kZSQxKHRoaXMuX3N0b3JlLCBub2RlS2V5LCAnZ2V0Jyk7XG4gICAgICB1cGRhdGVSZXRhaW5Db3VudCQxKHRoaXMuX3N0b3JlLCBub2RlS2V5LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9SZWxlYXNlX0lOVEVSTkFMKCk7XG4gIH1cblxuICByZXRhaW4oKSB7XG4gICAgaWYgKHRoaXMuX3JlZkNvdW50IDw9IDApIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2VycignU25hcHNob3QgaGFzIGFscmVhZHkgYmVlbiByZWxlYXNlZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignQXR0ZW1wdCB0byByZXRhaW4oKSBTbmFwc2hvdCB0aGF0IHdhcyBhbHJlYWR5IHJlbGVhc2VkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3JlZkNvdW50Kys7XG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcmVsZWFzZWQpIHtcbiAgICAgICAgcmVsZWFzZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3JlbGVhc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBzbmFwc2hvdCBvbiB0aGUgbmV4dCB0aWNrLiAgVGhpcyBtZWFucyB0aGUgc25hcHNob3QgaXMgcmV0YWluZWRcbiAgICogZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gdXNpbmcgaXQuXG4gICAqL1xuXG5cbiAgYXV0b1JlbGVhc2VfSU5URVJOQUwoKSB7XG4gICAgaWYgKCFpc1NTUiQxKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLl9yZWxlYXNlKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIF9yZWxlYXNlKCkge1xuICAgIHRoaXMuX3JlZkNvdW50LS07XG5cbiAgICBpZiAodGhpcy5fcmVmQ291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuX3N0b3JlLmdldFN0YXRlKCkubm9kZUNsZWFudXBGdW5jdGlvbnMuZm9yRWFjaChjbGVhbnVwID0+IGNsZWFudXAoKSk7XG5cbiAgICAgIHRoaXMuX3N0b3JlLmdldFN0YXRlKCkubm9kZUNsZWFudXBGdW5jdGlvbnMuY2xlYXIoKTtcblxuICAgICAgaWYgKCFSZWNvaWxfZ2t4KCdyZWNvaWxfbWVtb3J5X21hbmFnYW1lbnRfMjAyMCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGVtcG9yYXJpbHkgbmVyZmluZyB0aGlzIHRvIGFsbG93IHVzIHRvIGZpbmQgYnJva2VuIGNhbGwgc2l0ZXMgd2l0aG91dFxuICAgICAgLy8gYWN0dWFsbHkgYnJlYWtpbmcgYW55Ym9keSB5ZXQuXG4gICAgICAvLyBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5rbm93bkF0b21zKSB7XG4gICAgICAvLyAgIHVwZGF0ZVJldGFpbkNvdW50VG9aZXJvKHRoaXMuX3N0b3JlLCBrKTtcbiAgICAgIC8vIH1cblxuICAgIH0gZWxzZSBpZiAodGhpcy5fcmVmQ291bnQgPCAwKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignU25hcHNob3QgcmVsZWFzZWQgYW4gZXh0cmEgdGltZS4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1JldGFpbmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWZDb3VudCA+IDA7XG4gIH1cblxuICBjaGVja1JlZkNvdW50X0lOVEVSTkFMKCkge1xuICAgIGlmIChSZWNvaWxfZ2t4KCdyZWNvaWxfbWVtb3J5X21hbmFnYW1lbnRfMjAyMCcpICYmIHRoaXMuX3JlZkNvdW50IDw9IDApIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgUmVjb2lsX3JlY292ZXJhYmxlVmlvbGF0aW9uKHJldGFpbldhcm5pbmcpO1xuICAgICAgfSAvLyBXaGF0IHdlIHdpbGwgc2hpcCBsYXRlcjpcbiAgICAgIC8vIHRocm93IGVycihyZXRhaW5XYXJuaW5nKTtcblxuICAgIH1cbiAgfVxuXG4gIGdldFN0b3JlX0lOVEVSTkFMKCkge1xuICAgIHRoaXMuY2hlY2tSZWZDb3VudF9JTlRFUk5BTCgpO1xuICAgIHJldHVybiB0aGlzLl9zdG9yZTtcbiAgfVxuXG4gIGdldElEKCkge1xuICAgIHRoaXMuY2hlY2tSZWZDb3VudF9JTlRFUk5BTCgpO1xuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRTdGF0ZSgpLmN1cnJlbnRUcmVlLnN0YXRlSUQ7XG4gIH0gLy8gV2Ugd2FudCB0byBhbGxvdyB0aGUgbWV0aG9kcyB0byBiZSBkZXN0cnVjdHVyZWQgYW5kIHVzZWQgYXMgYWNjZXNzb3JzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmYi13d3cvZXh0cmEtYXJyb3ctaW5pdGlhbGl6ZXJcblxuXG59XG5cbmZ1bmN0aW9uIGNsb25lU3RvcmVTdGF0ZShzdG9yZSwgdHJlZVN0YXRlLCBidW1wVmVyc2lvbiA9IGZhbHNlKSB7XG4gIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB2ZXJzaW9uID0gYnVtcFZlcnNpb24gPyBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQyKCkgOiB0cmVlU3RhdGUudmVyc2lvbjtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VHJlZTogYnVtcFZlcnNpb24gPyB7XG4gICAgICAvLyBUT0RPIHNuYXBzaG90cyBzaG91bGRuJ3QgcmVhbGx5IGhhdmUgdmVyc2lvbnMgYmVjYXVzZSBhIG5ldyB2ZXJzaW9uIG51bWJlclxuICAgICAgLy8gaXMgYWx3YXlzIGFzc2lnbmVkIHdoZW4gdGhlIHNuYXBzaG90IGlzIGdvbmUgdG8uXG4gICAgICB2ZXJzaW9uLFxuICAgICAgc3RhdGVJRDogdmVyc2lvbixcbiAgICAgIHRyYW5zYWN0aW9uTWV0YWRhdGE6IHsgLi4udHJlZVN0YXRlLnRyYW5zYWN0aW9uTWV0YWRhdGFcbiAgICAgIH0sXG4gICAgICBkaXJ0eUF0b21zOiBuZXcgU2V0KHRyZWVTdGF0ZS5kaXJ0eUF0b21zKSxcbiAgICAgIGF0b21WYWx1ZXM6IHRyZWVTdGF0ZS5hdG9tVmFsdWVzLmNsb25lKCksXG4gICAgICBub252YWxpZGF0ZWRBdG9tczogdHJlZVN0YXRlLm5vbnZhbGlkYXRlZEF0b21zLmNsb25lKClcbiAgICB9IDogdHJlZVN0YXRlLFxuICAgIGNvbW1pdERlcHRoOiAwLFxuICAgIG5leHRUcmVlOiBudWxsLFxuICAgIHByZXZpb3VzVHJlZTogbnVsbCxcbiAgICBrbm93bkF0b21zOiBuZXcgU2V0KHN0b3JlU3RhdGUua25vd25BdG9tcyksXG4gICAgLy8gRklYTUUgaGVyZSdzIGEgY29weVxuICAgIGtub3duU2VsZWN0b3JzOiBuZXcgU2V0KHN0b3JlU3RhdGUua25vd25TZWxlY3RvcnMpLFxuICAgIC8vIEZJWE1FIGhlcmUncyBhIGNvcHlcbiAgICB0cmFuc2FjdGlvblN1YnNjcmlwdGlvbnM6IG5ldyBNYXAoKSxcbiAgICBub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zOiBuZXcgTWFwKCksXG4gICAgbm9kZVRvQ29tcG9uZW50U3Vic2NyaXB0aW9uczogbmV3IE1hcCgpLFxuICAgIHF1ZXVlZENvbXBvbmVudENhbGxiYWNrc19ERVBSRUNBVEVEOiBbXSxcbiAgICBzdXNwZW5kZWRDb21wb25lbnRSZXNvbHZlcnM6IG5ldyBTZXQoKSxcbiAgICBncmFwaHNCeVZlcnNpb246IG5ldyBNYXAoKS5zZXQodmVyc2lvbiwgc3RvcmUuZ2V0R3JhcGgodHJlZVN0YXRlLnZlcnNpb24pKSxcbiAgICByZXRlbnRpb246IHtcbiAgICAgIHJlZmVyZW5jZUNvdW50czogbmV3IE1hcCgpLFxuICAgICAgbm9kZXNSZXRhaW5lZEJ5Wm9uZTogbmV3IE1hcCgpLFxuICAgICAgcmV0YWluYWJsZXNUb0NoZWNrRm9yUmVsZWFzZTogbmV3IFNldCgpXG4gICAgfSxcbiAgICAvLyBGSVhNRSBoZXJlJ3MgYSBjb3B5XG4gICAgLy8gQ3JlYXRlIGJsYW5rIGNsZWFudXAgaGFuZGxlcnMgZm9yIGF0b21zIHNvIHNuYXBzaG90cyBkb24ndCByZS1ydW5cbiAgICAvLyBhdG9tIGVmZmVjdHMuXG4gICAgbm9kZUNsZWFudXBGdW5jdGlvbnM6IG5ldyBNYXAoUmVjb2lsX21hcEl0ZXJhYmxlKHN0b3JlU3RhdGUubm9kZUNsZWFudXBGdW5jdGlvbnMuZW50cmllcygpLCAoW2tleV0pID0+IFtrZXksICgpID0+IHt9XSkpXG4gIH07XG59IC8vIEZhY3RvcnkgdG8gYnVpbGQgYSBmcmVzaCBzbmFwc2hvdFxuXG5cbmZ1bmN0aW9uIGZyZXNoU25hcHNob3QoaW5pdGlhbGl6ZVN0YXRlKSB7XG4gIGNvbnN0IHNuYXBzaG90ID0gbmV3IFNuYXBzaG90KG1ha2VFbXB0eVN0b3JlU3RhdGUkMSgpKTtcbiAgcmV0dXJuIGluaXRpYWxpemVTdGF0ZSAhPSBudWxsID8gc25hcHNob3QubWFwKGluaXRpYWxpemVTdGF0ZSkgOiBzbmFwc2hvdDtcbn0gLy8gRmFjdG9yeSB0byBjbG9uZSBhIHNuYXBhaG90IHN0YXRlXG5cblxuY29uc3QgW21lbW9pemVkQ2xvbmVTbmFwc2hvdCwgaW52YWxpZGF0ZU1lbW9pemVkU25hcHNob3RdID0gbWVtb2l6ZU9uZVdpdGhBcmdzSGFzaEFuZEludmFsaWRhdGlvbiQxKChzdG9yZSwgdmVyc2lvbikgPT4ge1xuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgdHJlZVN0YXRlID0gdmVyc2lvbiA9PT0gJ2N1cnJlbnQnID8gc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSA6IFJlY29pbF9udWxsdGhyb3dzKHN0b3JlU3RhdGUucHJldmlvdXNUcmVlKTtcbiAgcmV0dXJuIG5ldyBTbmFwc2hvdChjbG9uZVN0b3JlU3RhdGUoc3RvcmUsIHRyZWVTdGF0ZSkpO1xufSwgKHN0b3JlLCB2ZXJzaW9uKSA9PiB7XG4gIHZhciBfc3RvcmUkZ2V0U3RhdGUkcHJldmk7XG5cbiAgcmV0dXJuIFN0cmluZyh2ZXJzaW9uKSArIFN0cmluZyhzdG9yZS5zdG9yZUlEKSArIFN0cmluZyhzdG9yZS5nZXRTdGF0ZSgpLmN1cnJlbnRUcmVlLnZlcnNpb24pICsgU3RyaW5nKChfc3RvcmUkZ2V0U3RhdGUkcHJldmkgPSBzdG9yZS5nZXRTdGF0ZSgpLnByZXZpb3VzVHJlZSkgPT09IG51bGwgfHwgX3N0b3JlJGdldFN0YXRlJHByZXZpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RvcmUkZ2V0U3RhdGUkcHJldmkudmVyc2lvbik7XG59KTtcblxuZnVuY3Rpb24gY2xvbmVTbmFwc2hvdChzdG9yZSwgdmVyc2lvbiA9ICdjdXJyZW50Jykge1xuICBjb25zdCBzbmFwc2hvdCA9IG1lbW9pemVkQ2xvbmVTbmFwc2hvdChzdG9yZSwgdmVyc2lvbik7XG5cbiAgaWYgKCFzbmFwc2hvdC5pc1JldGFpbmVkKCkpIHtcbiAgICBpbnZhbGlkYXRlTWVtb2l6ZWRTbmFwc2hvdCgpO1xuICAgIHJldHVybiBtZW1vaXplZENsb25lU25hcHNob3Qoc3RvcmUsIHZlcnNpb24pO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5jbGFzcyBNdXRhYmxlU25hcHNob3QgZXh0ZW5kcyBTbmFwc2hvdCB7XG4gIGNvbnN0cnVjdG9yKHNuYXBzaG90LCBiYXRjaCkge1xuICAgIHN1cGVyKGNsb25lU3RvcmVTdGF0ZShzbmFwc2hvdC5nZXRTdG9yZV9JTlRFUk5BTCgpLCBzbmFwc2hvdC5nZXRTdG9yZV9JTlRFUk5BTCgpLmdldFN0YXRlKCkuY3VycmVudFRyZWUsIHRydWUpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9iYXRjaFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0XCIsIChyZWNvaWxTdGF0ZSwgbmV3VmFsdWVPclVwZGF0ZXIpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZWZDb3VudF9JTlRFUk5BTCgpO1xuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmdldFN0b3JlX0lOVEVSTkFMKCk7IC8vIFRoaXMgYmF0Y2hVcGRhdGVzIGVuc3VyZXMgdGhpcyBgc2V0YCBpcyBhcHBsaWVkIGltbWVkaWF0ZWx5IGFuZCB5b3UgY2FuXG4gICAgICAvLyByZWFkIHRoZSB3cml0dGVuIHZhbHVlIGFmdGVyIGNhbGxpbmcgYHNldGAuIEkgd291bGQgbGlrZSB0byByZW1vdmUgdGhpc1xuICAgICAgLy8gYmVoYXZpb3IgYW5kIG9ubHkgYmF0Y2ggaW4gYFNuYXBzaG90Lm1hcGAsIGJ1dCB0aGlzIHdvdWxkIGJlIGEgYnJlYWtpbmdcbiAgICAgIC8vIGNoYW5nZSBwb3RlbnRpYWxseS5cblxuICAgICAgdGhpcy5fYmF0Y2goKCkgPT4ge1xuICAgICAgICB1cGRhdGVSZXRhaW5Db3VudCQxKHN0b3JlLCByZWNvaWxTdGF0ZS5rZXksIDEpO1xuICAgICAgICBzZXRSZWNvaWxWYWx1ZSQxKHRoaXMuZ2V0U3RvcmVfSU5URVJOQUwoKSwgcmVjb2lsU3RhdGUsIG5ld1ZhbHVlT3JVcGRhdGVyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVzZXRcIiwgcmVjb2lsU3RhdGUgPT4ge1xuICAgICAgdGhpcy5jaGVja1JlZkNvdW50X0lOVEVSTkFMKCk7XG4gICAgICBjb25zdCBzdG9yZSA9IHRoaXMuZ2V0U3RvcmVfSU5URVJOQUwoKTsgLy8gU2VlIG5vdGUgYXQgYHNldGAgYWJvdXQgYmF0Y2hlZCB1cGRhdGVzLlxuXG4gICAgICB0aGlzLl9iYXRjaCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVJldGFpbkNvdW50JDEoc3RvcmUsIHJlY29pbFN0YXRlLmtleSwgMSk7XG4gICAgICAgIHNldFJlY29pbFZhbHVlJDEodGhpcy5nZXRTdG9yZV9JTlRFUk5BTCgpLCByZWNvaWxTdGF0ZSwgREVGQVVMVF9WQUxVRSQxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVzX0RFUFJFQ0FURURcIiwgdmFsdWVzID0+IHtcbiAgICAgIHRoaXMuY2hlY2tSZWZDb3VudF9JTlRFUk5BTCgpO1xuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmdldFN0b3JlX0lOVEVSTkFMKCk7IC8vIFNlZSBub3RlIGF0IGBzZXRgIGFib3V0IGJhdGNoZWQgdXBkYXRlcy5cblxuICAgICAgYmF0Y2hVcGRhdGVzJDEoKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB2YWx1ZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgdXBkYXRlUmV0YWluQ291bnQkMShzdG9yZSwgaywgMSk7XG4gICAgICAgICAgc2V0VW52YWxpZGF0ZWRSZWNvaWxWYWx1ZSQxKHN0b3JlLCBuZXcgQWJzdHJhY3RSZWNvaWxWYWx1ZSQyKGspLCB2KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9iYXRjaCA9IGJhdGNoO1xuICB9IC8vIFdlIHdhbnQgdG8gYWxsb3cgdGhlIG1ldGhvZHMgdG8gYmUgZGVzdHJ1Y3R1cmVkIGFuZCB1c2VkIGFzIGFjY2Vzc29yc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L2V4dHJhLWFycm93LWluaXRpYWxpemVyXG5cblxufVxuXG52YXIgUmVjb2lsX1NuYXBzaG90ID0ge1xuICBTbmFwc2hvdCxcbiAgTXV0YWJsZVNuYXBzaG90LFxuICBmcmVzaFNuYXBzaG90LFxuICBjbG9uZVNuYXBzaG90XG59O1xuXG52YXIgUmVjb2lsX1NuYXBzaG90XzEgPSBSZWNvaWxfU25hcHNob3QuU25hcHNob3Q7XG52YXIgUmVjb2lsX1NuYXBzaG90XzIgPSBSZWNvaWxfU25hcHNob3QuTXV0YWJsZVNuYXBzaG90O1xudmFyIFJlY29pbF9TbmFwc2hvdF8zID0gUmVjb2lsX1NuYXBzaG90LmZyZXNoU25hcHNob3Q7XG52YXIgUmVjb2lsX1NuYXBzaG90XzQgPSBSZWNvaWxfU25hcHNob3QuY2xvbmVTbmFwc2hvdDtcblxudmFyIFJlY29pbF9TbmFwc2hvdCQxID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIFNuYXBzaG90OiBSZWNvaWxfU25hcHNob3RfMSxcbiAgTXV0YWJsZVNuYXBzaG90OiBSZWNvaWxfU25hcHNob3RfMixcbiAgZnJlc2hTbmFwc2hvdDogUmVjb2lsX1NuYXBzaG90XzMsXG4gIGNsb25lU25hcHNob3Q6IFJlY29pbF9TbmFwc2hvdF80XG59KTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIHVuaW9uU2V0cyguLi5zZXRzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGNvbnN0IHNldCBvZiBzZXRzKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZXQpIHtcbiAgICAgIHJlc3VsdC5hZGQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBSZWNvaWxfdW5pb25TZXRzID0gdW5pb25TZXRzO1xuXG5jb25zdCB7XG4gIHVzZVJlZlxufSA9IHJlYWN0O1xuLyoqXG4gKiBUaGUgc2FtZSBhcyBgdXNlUmVmKClgIGV4Y2VwdCB0aGF0IGlmIGEgZnVuY3Rpb24gaXMgc3BlY2lmaWVkIHRoZW4gaXQgd2lsbFxuICogY2FsbCB0aGF0IGZ1bmN0aW9uIHRvIGdldCB0aGUgdmFsdWUgdG8gaW5pdGlhbGl6ZSB0aGUgcmVmZXJlbmNlIHdpdGguXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IGB1c2VTdGF0ZSgpYCBiZWhhdmVzIHdoZW4gZ2l2ZW4gYSBmdW5jdGlvbi4gIEl0IGFsbG93c1xuICogdGhlIHVzZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3Igc3Vic2VxdWVudCByZW5kZXJzLlxuICogVGhlIHRyYWRlb2ZmIGlzIHRoYXQgdG8gc2V0IHRoZSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiBpdHNlbGYgeW91IG5lZWQgdG9cbiAqIG5lc3QgaXQ6IHVzZVJlZkluaXRPbmNlKCgpID0+ICgpID0+IHsuLi59KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHVzZVJlZkluaXRPbmNlKGluaXRpYWxWYWx1ZSkge1xuICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG4gIGNvbnN0IHJlZiA9IHVzZVJlZihpbml0aWFsVmFsdWUpO1xuXG4gIGlmIChyZWYuY3VycmVudCA9PT0gaW5pdGlhbFZhbHVlICYmIHR5cGVvZiBpbml0aWFsVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLXVzZV1cbiAgICByZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIFJlY29pbF91c2VSZWZJbml0T25jZSA9IHVzZVJlZkluaXRPbmNlO1xuXG4vLyBAZmItb25seTogY29uc3QgUmVjb2lsdXNhZ2Vsb2dFdmVudCA9IHJlcXVpcmUoJ1JlY29pbHVzYWdlbG9nRXZlbnQnKTtcbi8vIEBmYi1vbmx5OiBjb25zdCBSZWNvaWxVc2FnZUxvZ0ZhbGNvRXZlbnQgPSByZXF1aXJlKCdSZWNvaWxVc2FnZUxvZ0ZhbGNvRXZlbnQnKTtcbi8vIEBmYi1vbmx5OiBjb25zdCBVUkkgPSByZXF1aXJlKCdVUkknKTtcblxuXG5jb25zdCB7XG4gIGdldE5leHRUcmVlU3RhdGVWZXJzaW9uOiBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQzLFxuICBtYWtlRW1wdHlTdG9yZVN0YXRlOiBtYWtlRW1wdHlTdG9yZVN0YXRlJDJcbn0gPSBSZWNvaWxfU3RhdGU7XG5cbmNvbnN0IHtcbiAgY2xlYW5VcE5vZGU6IGNsZWFuVXBOb2RlJDIsXG4gIGdldERvd25zdHJlYW1Ob2RlczogZ2V0RG93bnN0cmVhbU5vZGVzJDIsXG4gIGluaXRpYWxpemVOb2RlOiBpbml0aWFsaXplTm9kZSQyLFxuICBzZXROb2RlVmFsdWU6IHNldE5vZGVWYWx1ZSQyLFxuICBzZXRVbnZhbGlkYXRlZEF0b21WYWx1ZV9ERVBSRUNBVEVEOiBzZXRVbnZhbGlkYXRlZEF0b21WYWx1ZV9ERVBSRUNBVEVEJDFcbn0gPSBSZWNvaWxfRnVuY3Rpb25hbENvcmU7XG5cbmNvbnN0IHtcbiAgZ3JhcGg6IGdyYXBoJDJcbn0gPSBSZWNvaWxfR3JhcGg7XG5cbmNvbnN0IHtcbiAgY2xvbmVHcmFwaDogY2xvbmVHcmFwaCQxXG59ID0gUmVjb2lsX0dyYXBoO1xuXG5jb25zdCB7XG4gIGdldE5leHRTdG9yZUlEOiBnZXROZXh0U3RvcmVJRCQyXG59ID0gUmVjb2lsX0tleXM7XG5cbmNvbnN0IHtcbiAgY3JlYXRlTXV0YWJsZVNvdXJjZTogY3JlYXRlTXV0YWJsZVNvdXJjZSQxLFxuICByZWFjdE1vZGU6IHJlYWN0TW9kZSQyXG59ID0gUmVjb2lsX1JlYWN0TW9kZTtcblxuY29uc3Qge1xuICBhcHBseUF0b21WYWx1ZVdyaXRlczogYXBwbHlBdG9tVmFsdWVXcml0ZXMkMVxufSA9IFJlY29pbF9SZWNvaWxWYWx1ZUludGVyZmFjZTtcblxuY29uc3Qge1xuICByZWxlYXNlU2NoZWR1bGVkUmV0YWluYWJsZXNOb3c6IHJlbGVhc2VTY2hlZHVsZWRSZXRhaW5hYmxlc05vdyQxXG59ID0gUmVjb2lsX1JldGVudGlvbjtcblxuY29uc3Qge1xuICBmcmVzaFNuYXBzaG90OiBmcmVzaFNuYXBzaG90JDFcbn0gPSBSZWNvaWxfU25hcHNob3QkMTtcblxuXG5cbmNvbnN0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmOiB1c2VSZWYkMSxcbiAgdXNlU3RhdGVcbn0gPSByZWFjdDtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIG5vdEluQUNvbnRleHQoKSB7XG4gIHRocm93IFJlY29pbF9lcnIoJ1RoaXMgY29tcG9uZW50IG11c3QgYmUgdXNlZCBpbnNpZGUgYSA8UmVjb2lsUm9vdD4gY29tcG9uZW50LicpO1xufVxuXG5jb25zdCBkZWZhdWx0U3RvcmUgPSBPYmplY3QuZnJlZXplKHtcbiAgc3RvcmVJRDogZ2V0TmV4dFN0b3JlSUQkMigpLFxuICBnZXRTdGF0ZTogbm90SW5BQ29udGV4dCxcbiAgcmVwbGFjZVN0YXRlOiBub3RJbkFDb250ZXh0LFxuICBnZXRHcmFwaDogbm90SW5BQ29udGV4dCxcbiAgc3Vic2NyaWJlVG9UcmFuc2FjdGlvbnM6IG5vdEluQUNvbnRleHQsXG4gIGFkZFRyYW5zYWN0aW9uTWV0YWRhdGE6IG5vdEluQUNvbnRleHRcbn0pO1xubGV0IHN0YXRlUmVwbGFjZXJJc0JlaW5nRXhlY3V0ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gc3RhcnROZXh0VHJlZUlmTmVlZGVkKHN0b3JlKSB7XG4gIGlmIChzdGF0ZVJlcGxhY2VySXNCZWluZ0V4ZWN1dGVkKSB7XG4gICAgdGhyb3cgUmVjb2lsX2VycignQW4gYXRvbSB1cGRhdGUgd2FzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIGV4ZWN1dGlvbiBvZiBhIHN0YXRlIHVwZGF0ZXIgZnVuY3Rpb24uIFN0YXRlIHVwZGF0ZXIgZnVuY3Rpb25zIHByb3ZpZGVkIHRvIFJlY29pbCBtdXN0IGJlIHB1cmUgZnVuY3Rpb25zLicpO1xuICB9XG5cbiAgY29uc3Qgc3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgaWYgKHN0b3JlU3RhdGUubmV4dFRyZWUgPT09IG51bGwpIHtcbiAgICBpZiAoUmVjb2lsX2dreCgncmVjb2lsX21lbW9yeV9tYW5hZ2FtZW50XzIwMjAnKSAmJiBSZWNvaWxfZ2t4KCdyZWNvaWxfcmVsZWFzZV9vbl9jYXNjYWRpbmdfdXBkYXRlX2tpbGxzd2l0Y2hfMjAyMScpKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGEgY2FzY2FkaW5nIHVwZGF0ZSAodGhhdCBpcywgcmVuZGVyaW5nIGR1ZSB0byBvbmUgc3RhdGUgY2hhbmdlXG4gICAgICAvLyBpbnZva2VzIGEgc2Vjb25kIHN0YXRlIGNoYW5nZSksIHdlIHdvbid0IGhhdmUgY2xlYW5lZCB1cCByZXRhaW5hYmxlcyB5ZXRcbiAgICAgIC8vIGJlY2F1c2UgdGhpcyBub3JtYWxseSBoYXBwZW5zIGFmdGVyIG5vdGlmeWluZyBjb21wb25lbnRzLiBEbyBpdCBiZWZvcmVcbiAgICAgIC8vIHByb2NlZWRpbmcgd2l0aCB0aGUgY2FzY2FkaW5nIHVwZGF0ZSBzbyB0aGF0IGl0IHJlbWFpbnMgcHJlZGljdGFibGU6XG4gICAgICBpZiAoc3RvcmVTdGF0ZS5jb21taXREZXB0aCA+IDApIHtcbiAgICAgICAgcmVsZWFzZVNjaGVkdWxlZFJldGFpbmFibGVzTm93JDEoc3RvcmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb24gPSBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlLnZlcnNpb247XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSBnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQzKCk7XG4gICAgc3RvcmVTdGF0ZS5uZXh0VHJlZSA9IHsgLi4uc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSxcbiAgICAgIHZlcnNpb246IG5leHRWZXJzaW9uLFxuICAgICAgc3RhdGVJRDogbmV4dFZlcnNpb24sXG4gICAgICBkaXJ0eUF0b21zOiBuZXcgU2V0KCksXG4gICAgICB0cmFuc2FjdGlvbk1ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgc3RvcmVTdGF0ZS5ncmFwaHNCeVZlcnNpb24uc2V0KG5leHRWZXJzaW9uLCBjbG9uZUdyYXBoJDEoUmVjb2lsX251bGx0aHJvd3Moc3RvcmVTdGF0ZS5ncmFwaHNCeVZlcnNpb24uZ2V0KHZlcnNpb24pKSkpO1xuICB9XG59XG5cbmNvbnN0IEFwcENvbnRleHQgPSByZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgY3VycmVudDogZGVmYXVsdFN0b3JlXG59KTtcblxuY29uc3QgdXNlU3RvcmVSZWYgPSAoKSA9PiB1c2VDb250ZXh0KEFwcENvbnRleHQpOyAvLyAkRmxvd0V4cGVjdGVkRXJyb3JbaW5jb21wYXRpYmxlLWNhbGxdXG5cblxuY29uc3QgTXV0YWJsZVNvdXJjZUNvbnRleHQgPSByZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VSZWNvaWxNdXRhYmxlU291cmNlKCkge1xuICBjb25zdCBtdXRhYmxlU291cmNlID0gdXNlQ29udGV4dChNdXRhYmxlU291cmNlQ29udGV4dCk7XG5cbiAgaWYgKG11dGFibGVTb3VyY2UgPT0gbnVsbCkge1xuICAgIFJlY29pbF9leHBlY3RhdGlvblZpb2xhdGlvbignQXR0ZW1wdGVkIHRvIHVzZSBhIFJlY29pbCBob29rIG91dHNpZGUgb2YgYSA8UmVjb2lsUm9vdD4uICcgKyAnPFJlY29pbFJvb3Q+IG11c3QgYmUgYW4gYW5jZXN0b3Igb2YgYW55IGNvbXBvbmVudCB0aGF0IHVzZXMgJyArICdSZWNvaWwgaG9va3MuJyk7XG4gIH1cblxuICByZXR1cm4gbXV0YWJsZVNvdXJjZTtcbn1cblxuZnVuY3Rpb24gbm90aWZ5Q29tcG9uZW50cyhzdG9yZSwgc3RvcmVTdGF0ZSwgdHJlZVN0YXRlKSB7XG4gIGNvbnN0IGRlcGVuZGVudE5vZGVzID0gZ2V0RG93bnN0cmVhbU5vZGVzJDIoc3RvcmUsIHRyZWVTdGF0ZSwgdHJlZVN0YXRlLmRpcnR5QXRvbXMpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGRlcGVuZGVudE5vZGVzKSB7XG4gICAgY29uc3QgY29tcHMgPSBzdG9yZVN0YXRlLm5vZGVUb0NvbXBvbmVudFN1YnNjcmlwdGlvbnMuZ2V0KGtleSk7XG5cbiAgICBpZiAoY29tcHMpIHtcbiAgICAgIGZvciAoY29uc3QgW19zdWJJRCwgW19kZWJ1Z05hbWUsIGNhbGxiYWNrXV0gb2YgY29tcHMpIHtcbiAgICAgICAgY2FsbGJhY2sodHJlZVN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VuZEVuZE9mQmF0Y2hOb3RpZmljYXRpb25zKHN0b3JlKSB7XG4gIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB0cmVlU3RhdGUgPSBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlOyAvLyBJbmZvcm0gdHJhbnNhY3Rpb24gc3Vic2NyaWJlcnMgb2YgdGhlIHRyYW5zYWN0aW9uOlxuXG4gIGNvbnN0IGRpcnR5QXRvbXMgPSB0cmVlU3RhdGUuZGlydHlBdG9tcztcblxuICBpZiAoZGlydHlBdG9tcy5zaXplKSB7XG4gICAgLy8gRXhlY3V0ZSBOb2RlLXNwZWNpZmljIHN1YnNjcmliZXJzIGJlZm9yZSBnbG9iYWwgc3Vic2NyaWJlcnNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHN1YnNjcmlwdGlvbnNdIG9mIHN0b3JlU3RhdGUubm9kZVRyYW5zYWN0aW9uU3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKGRpcnR5QXRvbXMuaGFzKGtleSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBbXywgc3Vic2NyaXB0aW9uXSBvZiBzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW18sIHN1YnNjcmlwdGlvbl0gb2Ygc3RvcmVTdGF0ZS50cmFuc2FjdGlvblN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbihzdG9yZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZWFjdE1vZGUkMigpLmVhcmx5IHx8IHN0b3JlU3RhdGUuc3VzcGVuZGVkQ29tcG9uZW50UmVzb2x2ZXJzLnNpemUgPiAwKSB7XG4gICAgICAvLyBOb3RpZnlpbmcgY29tcG9uZW50cyBpcyBuZWVkZWQgdG8gd2FrZSBmcm9tIHN1c3BlbnNlLCBldmVuIHdoZW4gdXNpbmdcbiAgICAgIC8vIGVhcmx5IHJlbmRlcmluZy5cbiAgICAgIG5vdGlmeUNvbXBvbmVudHMoc3RvcmUsIHN0b3JlU3RhdGUsIHRyZWVTdGF0ZSk7IC8vIFdha2UgYWxsIHN1c3BlbmRlZCBjb21wb25lbnRzIHNvIHRoZSByaWdodCBvbmUocykgY2FuIHRyeSB0byByZS1yZW5kZXIuXG4gICAgICAvLyBXZSBuZWVkIHRvIHdha2UgdXAgY29tcG9uZW50cyBub3QganVzdCB3aGVuIHNvbWUgYXN5bmNocm9ub3VzIHNlbGVjdG9yXG4gICAgICAvLyByZXNvbHZlZCwgYnV0IGFsc28gd2hlbiBjaGFuZ2luZyBzeW5jaHJvbm91cyB2YWx1ZXMgYmVjYXVzZSB0aGlzIG1heSBjYXVzZVxuICAgICAgLy8gYSBzZWxlY3RvciB0byBjaGFuZ2UgZnJvbSBhc3luY2hyb25vdXMgdG8gc3luY2hyb25vdXMsIGluIHdoaWNoIGNhc2UgdGhlcmVcbiAgICAgIC8vIHdvdWxkIGJlIG5vIGZvbGxvdy11cCBhc3luY2hyb25vdXMgcmVzb2x1dGlvbiB0byB3YWtlIHVzIHVwLlxuICAgICAgLy8gVE9ETyBPUFRJTUlaQVRJT04gT25seSB3YWtlIHVwIHJlbGF0ZWQgZG93bnN0cmVhbSBjb21wb25lbnRzXG5cbiAgICAgIHN0b3JlU3RhdGUuc3VzcGVuZGVkQ29tcG9uZW50UmVzb2x2ZXJzLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgICBzdG9yZVN0YXRlLnN1c3BlbmRlZENvbXBvbmVudFJlc29sdmVycy5jbGVhcigpO1xuICAgIH1cbiAgfSAvLyBTcGVjaWFsIGJlaGF2aW9yIE9OTFkgaW52b2tlZCBieSB1c2VJbnRlcmZhY2UuXG4gIC8vIEZJWE1FIGRlbGV0ZSBxdWV1ZWRDb21wb25lbnRDYWxsYmFja3NfREVQUkVDQVRFRCB3aGVuIGRlbGV0aW5nIHVzZUludGVyZmFjZS5cblxuXG4gIHN0b3JlU3RhdGUucXVldWVkQ29tcG9uZW50Q2FsbGJhY2tzX0RFUFJFQ0FURUQuZm9yRWFjaChjYiA9PiBjYih0cmVlU3RhdGUpKTtcbiAgc3RvcmVTdGF0ZS5xdWV1ZWRDb21wb25lbnRDYWxsYmFja3NfREVQUkVDQVRFRC5zcGxpY2UoMCwgc3RvcmVTdGF0ZS5xdWV1ZWRDb21wb25lbnRDYWxsYmFja3NfREVQUkVDQVRFRC5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBlbmRCYXRjaChzdG9yZSkge1xuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgc3RvcmVTdGF0ZS5jb21taXREZXB0aCsrO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge1xuICAgICAgbmV4dFRyZWVcbiAgICB9ID0gc3RvcmVTdGF0ZTsgLy8gSWdub3JlIGNvbW1pdHMgdGhhdCBhcmUgbm90IGJlY2F1c2Ugb2YgUmVjb2lsIHRyYW5zYWN0aW9ucyAtLSBuYW1lbHksXG4gICAgLy8gYmVjYXVzZSBzb21ldGhpbmcgYWJvdmUgUmVjb2lsUm9vdCByZS1yZW5kZXJlZDpcblxuICAgIGlmIChuZXh0VHJlZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbmV4dFRyZWUgaXMgbm93IGNvbW1pdHRlZCAtLSBub3RlIHRoYXQgY29weWluZyBhbmQgcmVzZXQgb2NjdXJzIHdoZW5cbiAgICAvLyBhIHRyYW5zYWN0aW9uIGJlZ2lucywgaW4gc3RhcnROZXh0VHJlZUlmTmVlZGVkOlxuXG5cbiAgICBzdG9yZVN0YXRlLnByZXZpb3VzVHJlZSA9IHN0b3JlU3RhdGUuY3VycmVudFRyZWU7XG4gICAgc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSA9IG5leHRUcmVlO1xuICAgIHN0b3JlU3RhdGUubmV4dFRyZWUgPSBudWxsO1xuICAgIHNlbmRFbmRPZkJhdGNoTm90aWZpY2F0aW9ucyhzdG9yZSk7XG5cbiAgICBpZiAoc3RvcmVTdGF0ZS5wcmV2aW91c1RyZWUgIT0gbnVsbCkge1xuICAgICAgc3RvcmVTdGF0ZS5ncmFwaHNCeVZlcnNpb24uZGVsZXRlKHN0b3JlU3RhdGUucHJldmlvdXNUcmVlLnZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWNvaWxfcmVjb3ZlcmFibGVWaW9sYXRpb24oJ0VuZGVkIGJhdGNoIHdpdGggbm8gcHJldmlvdXMgc3RhdGUsIHdoaWNoIGlzIHVuZXhwZWN0ZWQnLCAncmVjb2lsJyk7XG4gICAgfVxuXG4gICAgc3RvcmVTdGF0ZS5wcmV2aW91c1RyZWUgPSBudWxsO1xuXG4gICAgaWYgKFJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICAgIHJlbGVhc2VTY2hlZHVsZWRSZXRhaW5hYmxlc05vdyQxKHN0b3JlKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcmVTdGF0ZS5jb21taXREZXB0aC0tO1xuICB9XG59XG4vKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhlIEJhdGNoZXIgaXMgdG8gb2JzZXJ2ZSB3aGVuIFJlYWN0IGJhdGNoZXMgZW5kIHNvIHRoYXRcbiAqIFJlY29pbCBzdGF0ZSBjaGFuZ2VzIGNhbiBiZSBiYXRjaGVkLiBXaGVuZXZlciBSZWNvaWwgc3RhdGUgY2hhbmdlcywgd2UgY2FsbFxuICogc2V0U3RhdGUgb24gdGhlIGJhdGNoZXIuIFRoZW4gd2Ugd2FpdCBmb3IgdGhhdCBjaGFuZ2UgdG8gYmUgY29tbWl0dGVkLCB3aGljaFxuICogc2lnbmlmaWVzIHRoZSBlbmQgb2YgdGhlIGJhdGNoLiBUaGF0J3Mgd2hlbiB3ZSByZXNwb25kIHRvIHRoZSBSZWNvaWwgY2hhbmdlLlxuICovXG5cblxuZnVuY3Rpb24gQmF0Y2hlcih7XG4gIHNldE5vdGlmeUJhdGNoZXJPZkNoYW5nZVxufSkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmKCk7XG4gIGNvbnN0IFssIHNldFN0YXRlXSA9IHVzZVN0YXRlKFtdKTtcbiAgc2V0Tm90aWZ5QmF0Y2hlck9mQ2hhbmdlKCgpID0+IHNldFN0YXRlKHt9KSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Tm90aWZ5QmF0Y2hlck9mQ2hhbmdlKCgpID0+IHNldFN0YXRlKHt9KSk7IC8vIElmIGFuIGFzeW5jaHJvbm91cyBzZWxlY3RvciByZXNvbHZlcyBhZnRlciB0aGUgQmF0Y2hlciBpcyB1bm1vdW50ZWQsXG4gICAgLy8gbm90aWZ5QmF0Y2hlck9mQ2hhbmdlIHdpbGwgc3RpbGwgYmUgY2FsbGVkLiBBbiBlcnJvciBnZXRzIHRocm93biB3aGVuZXZlclxuICAgIC8vIHNldFN0YXRlIGlzIGNhbGxlZCBhZnRlciBhIGNvbXBvbmVudCBpcyBhbHJlYWR5IHVubW91bnRlZCwgc28gdGhpcyBzZXRzXG4gICAgLy8gbm90aWZ5QmF0Y2hlck9mQ2hhbmdlIHRvIGJlIGEgbm8tb3AuXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2V0Tm90aWZ5QmF0Y2hlck9mQ2hhbmdlKCgpID0+IHt9KTtcbiAgICB9O1xuICB9LCBbc2V0Tm90aWZ5QmF0Y2hlck9mQ2hhbmdlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gZW5xdWV1ZUV4ZWN1dGlvbiBydW5zIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHk7IGl0IGlzIG9ubHkgdXNlZCB0b1xuICAgIC8vIG1hbmlwdWxhdGUgdGhlIG9yZGVyIG9mIHVzZUVmZmVjdHMgZHVyaW5nIHRlc3RzLCBzaW5jZSBSZWFjdCBzZWVtcyB0b1xuICAgIC8vIGNhbGwgdXNlRWZmZWN0IGluIGFuIHVucHJlZGljdGFibGUgb3JkZXIgc29tZXRpbWVzLlxuICAgIFJlY29pbF9RdWV1ZS5lbnF1ZXVlRXhlY3V0aW9uKCdCYXRjaGVyJywgKCkgPT4ge1xuICAgICAgZW5kQmF0Y2goc3RvcmVSZWYuY3VycmVudCk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbnVsbDtcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXdpbmRvdy4kcmVjb2lsRGVidWdTdGF0ZXMpIHtcbiAgICB3aW5kb3cuJHJlY29pbERlYnVnU3RhdGVzID0gW107XG4gIH1cbn0gLy8gV2hlbiByZW1vdmluZyB0aGlzIGRlcHJlY2F0ZWQgZnVuY3Rpb24sIHJlbW92ZSBzdGF0ZUJ5U2V0dGluZ1JlY29pbFZhbHVlXG4vLyB3aGljaCB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWQuXG5cblxuZnVuY3Rpb24gaW5pdGlhbFN0b3JlU3RhdGVfREVQUkVDQVRFRChzdG9yZSwgaW5pdGlhbGl6ZVN0YXRlKSB7XG4gIGNvbnN0IGluaXRpYWwgPSBtYWtlRW1wdHlTdG9yZVN0YXRlJDIoKTtcbiAgaW5pdGlhbGl6ZVN0YXRlKHtcbiAgICAvLyAkRmxvd0ZpeE1lW2VzY2FwZWQtZ2VuZXJpY11cbiAgICBzZXQ6IChhdG9tLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBpbml0aWFsLmN1cnJlbnRUcmVlO1xuICAgICAgY29uc3Qgd3JpdGVzID0gc2V0Tm9kZVZhbHVlJDIoc3RvcmUsIHN0YXRlLCBhdG9tLmtleSwgdmFsdWUpO1xuICAgICAgY29uc3Qgd3JpdHRlbk5vZGVzID0gbmV3IFNldCh3cml0ZXMua2V5cygpKTtcbiAgICAgIGNvbnN0IG5vbnZhbGlkYXRlZEF0b21zID0gc3RhdGUubm9udmFsaWRhdGVkQXRvbXMuY2xvbmUoKTtcblxuICAgICAgZm9yIChjb25zdCBuIG9mIHdyaXR0ZW5Ob2Rlcykge1xuICAgICAgICBub252YWxpZGF0ZWRBdG9tcy5kZWxldGUobik7XG4gICAgICB9XG5cbiAgICAgIGluaXRpYWwuY3VycmVudFRyZWUgPSB7IC4uLnN0YXRlLFxuICAgICAgICBkaXJ0eUF0b21zOiBSZWNvaWxfdW5pb25TZXRzKHN0YXRlLmRpcnR5QXRvbXMsIHdyaXR0ZW5Ob2RlcyksXG4gICAgICAgIGF0b21WYWx1ZXM6IGFwcGx5QXRvbVZhbHVlV3JpdGVzJDEoc3RhdGUuYXRvbVZhbHVlcywgd3JpdGVzKSxcbiAgICAgICAgLy8gTkI6IFBMRUFTRSB1bi1leHBvcnQgYXBwbHlBdG9tVmFsdWVXcml0ZXMgd2hlbiBkZWxldGluZyB0aGlzIGNvZGVcbiAgICAgICAgbm9udmFsaWRhdGVkQXRvbXNcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXRVbnZhbGlkYXRlZEF0b21WYWx1ZXM6IGF0b21WYWx1ZXMgPT4ge1xuICAgICAgLy8gRklYTUUgcmVwbGFjZSB0aGlzIHdpdGggYSBtdXRhdGl2ZSBsb29wXG4gICAgICBhdG9tVmFsdWVzLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgaW5pdGlhbC5jdXJyZW50VHJlZSA9IHNldFVudmFsaWRhdGVkQXRvbVZhbHVlX0RFUFJFQ0FURUQkMShpbml0aWFsLmN1cnJlbnRUcmVlLCBrLCB2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpbml0aWFsO1xufSAvLyBJbml0aWFsaXplIHN0YXRlIHNuYXBzaG90IGZvciA8UmVjb2lsUm9vdD4gZm9yIHRoZSBpbml0aWFsaXplU3RhdGUgcHJvcC5cbi8vIEF0b20gZWZmZWN0IGluaXRpYWxpemF0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGlzIHByb3AuXG4vLyBBbnkgYXRvbSBlZmZlY3RzIHdpbGwgYmUgcnVuIGJlZm9yZSBpbml0aWFsaXphdGlvbiwgYnV0IHRoZW4gY2xlYW5lZCB1cCxcbi8vIHRoZXkgYXJlIHRoZW4gcmUtcnVuIHdoZW4gdXNlZCBhcyBwYXJ0IG9mIHJlbmRlcmluZy4gIFRoZXNlIHNlbWFudGljcyBhcmVcbi8vIGNvbXBhdGlibGUgd2l0aCBSZWFjdCBTdHJpY3RNb2RlIHdoZXJlIGVmZmVjdHMgbWF5IGJlIHJlLXJ1biBtdWx0aXBsZSB0aW1lc1xuLy8gYnV0IHN0YXRlIGluaXRpYWxpemF0aW9uIG9ubHkgaGFwcGVucyBvbmNlIHRoZSBmaXJzdCB0aW1lLlxuXG5cbmZ1bmN0aW9uIGluaXRpYWxTdG9yZVN0YXRlKGluaXRpYWxpemVTdGF0ZSkge1xuICAvLyBJbml0aWFsaXplIGEgc25hcHNob3QgYW5kIGdldCBpdHMgc3RvcmVcbiAgY29uc3Qgc25hcHNob3QgPSBmcmVzaFNuYXBzaG90JDEoKS5tYXAoaW5pdGlhbGl6ZVN0YXRlKTtcbiAgY29uc3Qgc3RvcmVTdGF0ZSA9IHNuYXBzaG90LmdldFN0b3JlX0lOVEVSTkFMKCkuZ2V0U3RhdGUoKTsgLy8gQ291bnRlcmFjdCB0aGUgc25hcHNob3QgYXV0by1yZWxlYXNlXG5cbiAgc25hcHNob3QucmV0YWluKCk7IC8vIENsZWFudXAgYW55IGVmZmVjdHMgcnVuIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgY2xlYXIgdGhlIGhhbmRsZXJzIHNvXG4gIC8vIHRoZXkgd2lsbCByZS1pbml0aWFsaXplIGlmIHVzZWQgZHVyaW5nIHJlbmRlcmluZy4gIFRoaXMgYWxsb3dzIGF0b20gZWZmZWN0XG4gIC8vIGluaXRpYWxpemF0aW9uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyIGluaXRpYWxpemVTdGF0ZSBhbmQgYmUgY29tcGF0aWJsZVxuICAvLyB3aXRoIFN0cmljdE1vZGUgc2VtYW50aWNzLlxuXG4gIHN0b3JlU3RhdGUubm9kZUNsZWFudXBGdW5jdGlvbnMuZm9yRWFjaChjbGVhbnVwID0+IGNsZWFudXAoKSk7XG4gIHN0b3JlU3RhdGUubm9kZUNsZWFudXBGdW5jdGlvbnMuY2xlYXIoKTtcbiAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5cbmxldCBuZXh0SUQgPSAwO1xuXG5mdW5jdGlvbiBSZWNvaWxSb290X0lOVEVSTkFMKHtcbiAgaW5pdGlhbGl6ZVN0YXRlX0RFUFJFQ0FURUQsXG4gIGluaXRpYWxpemVTdGF0ZSxcbiAgc3RvcmVfSU5URVJOQUw6IHN0b3JlUHJvcCxcbiAgLy8gRm9yIHVzZSB3aXRoIFJlYWN0IFwiY29udGV4dCBicmlkZ2luZ1wiXG4gIGNoaWxkcmVuXG59KSB7XG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICAvLyBAZmItb25seTogdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gQGZiLW9ubHk6IGlmIChna3goJ3JlY29pbF91c2FnZV9sb2dnaW5nJykpIHtcbiAgLy8gQGZiLW9ubHk6IHRyeSB7XG4gIC8vIEBmYi1vbmx5OiBSZWNvaWxVc2FnZUxvZ0ZhbGNvRXZlbnQubG9nKCgpID0+ICh7XG4gIC8vIEBmYi1vbmx5OiB0eXBlOiBSZWNvaWx1c2FnZWxvZ0V2ZW50LlJFQ09JTF9ST09UX01PVU5URUQsXG4gIC8vIEBmYi1vbmx5OiBwYXRoOiBVUkkuZ2V0UmVxdWVzdFVSSSgpLmdldFBhdGgoKSxcbiAgLy8gQGZiLW9ubHk6IH0pKTtcbiAgLy8gQGZiLW9ubHk6IH0gY2F0Y2gge1xuICAvLyBAZmItb25seTogcmVjb3ZlcmFibGVWaW9sYXRpb24oXG4gIC8vIEBmYi1vbmx5OiAnRXJyb3Igd2hlbiBsb2dnaW5nIFJlY29pbCBVc2FnZSBldmVudCcsXG4gIC8vIEBmYi1vbmx5OiAncmVjb2lsJyxcbiAgLy8gQGZiLW9ubHk6ICk7XG4gIC8vIEBmYi1vbmx5OiB9XG4gIC8vIEBmYi1vbmx5OiB9XG4gIC8vIEBmYi1vbmx5OiB9LCBbXSk7XG4gIGxldCBzdG9yZVN0YXRlUmVmOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1jb25zdFxuXG4gIGNvbnN0IGdldEdyYXBoID0gdmVyc2lvbiA9PiB7XG4gICAgY29uc3QgZ3JhcGhzID0gc3RvcmVTdGF0ZVJlZi5jdXJyZW50LmdyYXBoc0J5VmVyc2lvbjtcblxuICAgIGlmIChncmFwaHMuaGFzKHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gUmVjb2lsX251bGx0aHJvd3MoZ3JhcGhzLmdldCh2ZXJzaW9uKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3R3JhcGggPSBncmFwaCQyKCk7XG4gICAgZ3JhcGhzLnNldCh2ZXJzaW9uLCBuZXdHcmFwaCk7XG4gICAgcmV0dXJuIG5ld0dyYXBoO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmliZVRvVHJhbnNhY3Rpb25zID0gKGNhbGxiYWNrLCBrZXkpID0+IHtcbiAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgIC8vIEdsb2JhbCB0cmFuc2FjdGlvbiBzdWJzY3JpcHRpb25zXG4gICAgICBjb25zdCB7XG4gICAgICAgIHRyYW5zYWN0aW9uU3Vic2NyaXB0aW9uc1xuICAgICAgfSA9IHN0b3JlUmVmLmN1cnJlbnQuZ2V0U3RhdGUoKTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElEKys7XG4gICAgICB0cmFuc2FjdGlvblN1YnNjcmlwdGlvbnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWxlYXNlOiAoKSA9PiB7XG4gICAgICAgICAgdHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zLmRlbGV0ZShpZCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vZGUtc3BlY2lmaWMgdHJhbnNhY3Rpb24gc3Vic2NyaXB0aW9uczpcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbm9kZVRyYW5zYWN0aW9uU3Vic2NyaXB0aW9uc1xuICAgICAgfSA9IHN0b3JlUmVmLmN1cnJlbnQuZ2V0U3RhdGUoKTtcblxuICAgICAgaWYgKCFub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIG5vZGVUcmFuc2FjdGlvblN1YnNjcmlwdGlvbnMuc2V0KGtleSwgbmV3IE1hcCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaWQgPSBuZXh0SUQrKztcbiAgICAgIFJlY29pbF9udWxsdGhyb3dzKG5vZGVUcmFuc2FjdGlvblN1YnNjcmlwdGlvbnMuZ2V0KGtleSkpLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVsZWFzZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnMgPSBub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zLmdldChrZXkpO1xuXG4gICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgIHN1YnMuZGVsZXRlKGlkKTtcblxuICAgICAgICAgICAgaWYgKHN1YnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICBub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYWRkVHJhbnNhY3Rpb25NZXRhZGF0YSA9IG1ldGFkYXRhID0+IHtcbiAgICBzdGFydE5leHRUcmVlSWZOZWVkZWQoc3RvcmVSZWYuY3VycmVudCk7XG5cbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobWV0YWRhdGEpKSB7XG4gICAgICBSZWNvaWxfbnVsbHRocm93cyhzdG9yZVJlZi5jdXJyZW50LmdldFN0YXRlKCkubmV4dFRyZWUpLnRyYW5zYWN0aW9uTWV0YWRhdGFba10gPSBtZXRhZGF0YVtrXTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVwbGFjZVN0YXRlID0gcmVwbGFjZXIgPT4ge1xuICAgIHN0YXJ0TmV4dFRyZWVJZk5lZWRlZChzdG9yZVJlZi5jdXJyZW50KTsgLy8gVXNlIHJlcGxhY2VyIHRvIGdldCB0aGUgbmV4dCBzdGF0ZTpcblxuICAgIGNvbnN0IG5leHRUcmVlID0gUmVjb2lsX251bGx0aHJvd3Moc3RvcmVTdGF0ZVJlZi5jdXJyZW50Lm5leHRUcmVlKTtcbiAgICBsZXQgcmVwbGFjZWQ7XG5cbiAgICB0cnkge1xuICAgICAgc3RhdGVSZXBsYWNlcklzQmVpbmdFeGVjdXRlZCA9IHRydWU7XG4gICAgICByZXBsYWNlZCA9IHJlcGxhY2VyKG5leHRUcmVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3RhdGVSZXBsYWNlcklzQmVpbmdFeGVjdXRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChyZXBsYWNlZCA9PT0gbmV4dFRyZWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LiRyZWNvaWxEZWJ1Z1N0YXRlcy5wdXNoKHJlcGxhY2VkKTsgLy8gVE9ETyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gaGVyZSBiZWNhdXNlIGl0J3Mgbm90IGJhdGNoZWRcbiAgICAgIH1cbiAgICB9IC8vIFNhdmUgY2hhbmdlcyB0byBuZXh0VHJlZSBhbmQgc2NoZWR1bGUgYSBSZWFjdCB1cGRhdGU6XG5cblxuICAgIHN0b3JlU3RhdGVSZWYuY3VycmVudC5uZXh0VHJlZSA9IHJlcGxhY2VkO1xuXG4gICAgaWYgKHJlYWN0TW9kZSQyKCkuZWFybHkpIHtcbiAgICAgIG5vdGlmeUNvbXBvbmVudHMoc3RvcmVSZWYuY3VycmVudCwgc3RvcmVTdGF0ZVJlZi5jdXJyZW50LCByZXBsYWNlZCk7XG4gICAgfVxuXG4gICAgUmVjb2lsX251bGx0aHJvd3Mobm90aWZ5QmF0Y2hlck9mQ2hhbmdlLmN1cnJlbnQpKCk7XG4gIH07XG5cbiAgY29uc3Qgbm90aWZ5QmF0Y2hlck9mQ2hhbmdlID0gdXNlUmVmJDEobnVsbCk7XG4gIGNvbnN0IHNldE5vdGlmeUJhdGNoZXJPZkNoYW5nZSA9IHVzZUNhbGxiYWNrKHggPT4ge1xuICAgIG5vdGlmeUJhdGNoZXJPZkNoYW5nZS5jdXJyZW50ID0geDtcbiAgfSwgW25vdGlmeUJhdGNoZXJPZkNoYW5nZV0pO1xuICBjb25zdCBzdG9yZVJlZiA9IFJlY29pbF91c2VSZWZJbml0T25jZSgoKSA9PiBzdG9yZVByb3AgIT09IG51bGwgJiYgc3RvcmVQcm9wICE9PSB2b2lkIDAgPyBzdG9yZVByb3AgOiB7XG4gICAgc3RvcmVJRDogZ2V0TmV4dFN0b3JlSUQkMigpLFxuICAgIGdldFN0YXRlOiAoKSA9PiBzdG9yZVN0YXRlUmVmLmN1cnJlbnQsXG4gICAgcmVwbGFjZVN0YXRlLFxuICAgIGdldEdyYXBoLFxuICAgIHN1YnNjcmliZVRvVHJhbnNhY3Rpb25zLFxuICAgIGFkZFRyYW5zYWN0aW9uTWV0YWRhdGFcbiAgfSk7XG5cbiAgaWYgKHN0b3JlUHJvcCAhPSBudWxsKSB7XG4gICAgc3RvcmVSZWYuY3VycmVudCA9IHN0b3JlUHJvcDtcbiAgfVxuXG4gIHN0b3JlU3RhdGVSZWYgPSBSZWNvaWxfdXNlUmVmSW5pdE9uY2UoKCkgPT4gaW5pdGlhbGl6ZVN0YXRlX0RFUFJFQ0FURUQgIT0gbnVsbCA/IGluaXRpYWxTdG9yZVN0YXRlX0RFUFJFQ0FURUQoc3RvcmVSZWYuY3VycmVudCwgaW5pdGlhbGl6ZVN0YXRlX0RFUFJFQ0FURUQpIDogaW5pdGlhbGl6ZVN0YXRlICE9IG51bGwgPyBpbml0aWFsU3RvcmVTdGF0ZShpbml0aWFsaXplU3RhdGUpIDogbWFrZUVtcHR5U3RvcmVTdGF0ZSQyKCkpO1xuICBjb25zdCBtdXRhYmxlU291cmNlID0gdXNlTWVtbygoKSA9PiBjcmVhdGVNdXRhYmxlU291cmNlJDEgPT09IG51bGwgfHwgY3JlYXRlTXV0YWJsZVNvdXJjZSQxID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVhdGVNdXRhYmxlU291cmNlJDEoc3RvcmVTdGF0ZVJlZiwgKCkgPT4gc3RvcmVTdGF0ZVJlZi5jdXJyZW50LmN1cnJlbnRUcmVlLnZlcnNpb24pLCBbc3RvcmVTdGF0ZVJlZl0pOyAvLyBDbGVhbnVwIHdoZW4gdGhlIDxSZWNvaWxSb290PiBpcyB1bm1vdW50ZWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlYWN0IGlzIGZyZWUgdG8gY2FsbCBlZmZlY3QgY2xlYW51cCBoYW5kbGVycyBhbmQgZWZmZWN0cyBhdCB3aWxsLCB0aGVcbiAgICAvLyBkZXBzIGFycmF5IGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uLiAgRm9yIGV4YW1wbGUsIFJlYWN0IHN0cmljdCBtb2RlXG4gICAgLy8gd2lsbCBleGVjdXRlIGVhY2ggZWZmZWN0IHR3aWNlIGZvciB0ZXN0aW5nLiAgVGhlcmVmb3JlLCB3ZSBuZWVkIHN5bW1ldHJ5XG4gICAgLy8gdG8gcmUtaW5pdGlhbGl6ZSBhbGwga25vd24gYXRvbXMgYWZ0ZXIgdGhleSB3ZXJlIGNsZWFuZWQgdXAuXG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuXG4gICAgZm9yIChjb25zdCBhdG9tS2V5IG9mIG5ldyBTZXQoc3RvcmUuZ2V0U3RhdGUoKS5rbm93bkF0b21zKSkge1xuICAgICAgaW5pdGlhbGl6ZU5vZGUkMihzdG9yZSwgYXRvbUtleSwgJ2dldCcpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGF0b21LZXkgb2Ygc3RvcmUuZ2V0U3RhdGUoKS5rbm93bkF0b21zKSB7XG4gICAgICAgIGNsZWFuVXBOb2RlJDIoc3RvcmUsIGF0b21LZXkpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzdG9yZVJlZl0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzdG9yZVJlZlxuICB9LCAvKiNfX1BVUkVfXyovcmVhY3QuY3JlYXRlRWxlbWVudChNdXRhYmxlU291cmNlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtdXRhYmxlU291cmNlXG4gIH0sIC8qI19fUFVSRV9fKi9yZWFjdC5jcmVhdGVFbGVtZW50KEJhdGNoZXIsIHtcbiAgICBzZXROb3RpZnlCYXRjaGVyT2ZDaGFuZ2U6IHNldE5vdGlmeUJhdGNoZXJPZkNoYW5nZVxuICB9KSwgY2hpbGRyZW4pKTtcbn1cblxuZnVuY3Rpb24gUmVjb2lsUm9vdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgb3ZlcnJpZGUsXG4gICAgLi4ucHJvcHNFeGNlcHRPdmVycmlkZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGFuY2VzdG9yU3RvcmVSZWYgPSB1c2VTdG9yZVJlZigpO1xuXG4gIGlmIChvdmVycmlkZSA9PT0gZmFsc2UgJiYgYW5jZXN0b3JTdG9yZVJlZi5jdXJyZW50ICE9PSBkZWZhdWx0U3RvcmUpIHtcbiAgICAvLyBJZiBhbmNlc3RvclN0b3JlUmVmLmN1cnJlbnQgIT09IGRlZmF1bHRTdG9yZSwgaXQgbWVhbnMgdGhhdCB0aGlzXG4gICAgLy8gUmVjb2lsUm9vdCBpcyBub3QgbmVzdGVkIHdpdGhpbiBhbm90aGVyLlxuICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3QuY3JlYXRlRWxlbWVudChSZWNvaWxSb290X0lOVEVSTkFMLCBwcm9wc0V4Y2VwdE92ZXJyaWRlKTtcbn1cblxuZnVuY3Rpb24gdXNlUmVjb2lsU3RvcmVJRCgpIHtcbiAgcmV0dXJuIHVzZVN0b3JlUmVmKCkuY3VycmVudC5zdG9yZUlEO1xufVxuXG52YXIgUmVjb2lsX1JlY29pbFJvb3QgPSB7XG4gIFJlY29pbFJvb3QsXG4gIHVzZVN0b3JlUmVmLFxuICB1c2VSZWNvaWxNdXRhYmxlU291cmNlLFxuICB1c2VSZWNvaWxTdG9yZUlELFxuICBub3RpZnlDb21wb25lbnRzX0ZPUl9URVNUSU5HOiBub3RpZnlDb21wb25lbnRzLFxuICBzZW5kRW5kT2ZCYXRjaE5vdGlmaWNhdGlvbnNfRk9SX1RFU1RJTkc6IHNlbmRFbmRPZkJhdGNoTm90aWZpY2F0aW9uc1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dBcnJheUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxudmFyIFJlY29pbF9zaGFsbG93QXJyYXlFcXVhbCA9IHNoYWxsb3dBcnJheUVxdWFsO1xuXG5jb25zdCB7XG4gIHVzZUVmZmVjdDogdXNlRWZmZWN0JDEsXG4gIHVzZVJlZjogdXNlUmVmJDJcbn0gPSByZWFjdDtcblxuZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWUpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmJDIoKTtcbiAgdXNlRWZmZWN0JDEoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbnZhciBSZWNvaWxfdXNlUHJldmlvdXMgPSB1c2VQcmV2aW91cztcblxuY29uc3Qge1xuICB1c2VTdG9yZVJlZjogdXNlU3RvcmVSZWYkMVxufSA9IFJlY29pbF9SZWNvaWxSb290O1xuXG5jb25zdCB7XG4gIFNVU1BFTlNFX1RJTUVPVVRfTVM6IFNVU1BFTlNFX1RJTUVPVVRfTVMkMVxufSA9IFJlY29pbF9SZXRlbnRpb247XG5cbmNvbnN0IHtcbiAgdXBkYXRlUmV0YWluQ291bnQ6IHVwZGF0ZVJldGFpbkNvdW50JDJcbn0gPSBSZWNvaWxfUmV0ZW50aW9uO1xuXG5jb25zdCB7XG4gIFJldGVudGlvblpvbmU6IFJldGVudGlvblpvbmUkM1xufSA9IFJlY29pbF9SZXRlbnRpb25ab25lO1xuXG5jb25zdCB7XG4gIHVzZUVmZmVjdDogdXNlRWZmZWN0JDIsXG4gIHVzZVJlZjogdXNlUmVmJDNcbn0gPSByZWFjdDtcblxuY29uc3Qge1xuICBpc1NTUjogaXNTU1IkMlxufSA9IFJlY29pbF9FbnZpcm9ubWVudDtcblxuXG5cblxuXG4gLy8gSSBkb24ndCBzZWUgYSB3YXkgdG8gYXZvaWQgdGhlIGFueSB0eXBlIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRvIGFjY2VwdCByZWFkYWJsZVxuLy8gYW5kIHdyaXRhYmxlIHZhbHVlcyB3aXRoIGFueSB0eXBlIHBhcmFtZXRlciwgYnV0IG5vcm1hbGx5IHdpdGggd3JpdGFibGUgb25lc1xuLy8gUmVjb2lsU3RhdGU8U29tZVQ+IGlzIG5vdCBhIHN1YnR5cGUgb2YgUmVjb2lsU3RhdGU8bWl4ZWQ+LlxuXG5cbi8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuZnVuY3Rpb24gdXNlUmV0YWluKHRvUmV0YWluKSB7XG4gIGlmICghUmVjb2lsX2dreCgncmVjb2lsX21lbW9yeV9tYW5hZ2FtZW50XzIwMjAnKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L3JlYWN0LWhvb2tzXG5cblxuICByZXR1cm4gdXNlUmV0YWluX0FDVFVBTCh0b1JldGFpbik7XG59XG5cbmZ1bmN0aW9uIHVzZVJldGFpbl9BQ1RVQUwodG9SZXRhaW4pIHtcbiAgY29uc3QgYXJyYXkgPSBBcnJheS5pc0FycmF5KHRvUmV0YWluKSA/IHRvUmV0YWluIDogW3RvUmV0YWluXTtcbiAgY29uc3QgcmV0YWluYWJsZXMgPSBhcnJheS5tYXAoYSA9PiBhIGluc3RhbmNlb2YgUmV0ZW50aW9uWm9uZSQzID8gYSA6IGEua2V5KTtcbiAgY29uc3Qgc3RvcmVSZWYgPSB1c2VTdG9yZVJlZiQxKCk7XG4gIHVzZUVmZmVjdCQyKCgpID0+IHtcbiAgICBpZiAoIVJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAodGltZW91dElELmN1cnJlbnQgJiYgIWlzU1NSJDIpIHtcbiAgICAgIC8vIEFscmVhZHkgcGVyZm9ybWVkIGEgdGVtcG9yYXJ5IHJldGFpbiBvbiByZW5kZXIsIHNpbXBseSBjYW5jZWwgdGhlIHJlbGVhc2VcbiAgICAgIC8vIG9mIHRoYXQgdGVtcG9yYXJ5IHJldGFpbi5cbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElELmN1cnJlbnQpO1xuICAgICAgdGltZW91dElELmN1cnJlbnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmV0YWluYWJsZXMpIHtcbiAgICAgICAgdXBkYXRlUmV0YWluQ291bnQkMihzdG9yZSwgciwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgciBvZiByZXRhaW5hYmxlcykge1xuICAgICAgICB1cGRhdGVSZXRhaW5Db3VudCQyKHN0b3JlLCByLCAtMSk7XG4gICAgICB9XG4gICAgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZiLXd3dy9yZWFjdC1ob29rcy1kZXBzXG4gIH0sIFtzdG9yZVJlZiwgLi4ucmV0YWluYWJsZXNdKTsgLy8gV2Ugd2FudCB0byByZXRhaW4gaWYgdGhlIGNvbXBvbmVudCBzdXNwZW5kcy4gVGhpcyBpcyB0ZXJyaWJsZSBidXQgdGhlIFN1c3BlbnNlXG4gIC8vIEFQSSBhZmZvcmRzIHVzIG5vIGJldHRlciBvcHRpb24uIElmIHdlIHN1c3BlbmQgYW5kIG5ldmVyIGNvbW1pdCBhZnRlciBzb21lXG4gIC8vIHNlY29uZHMsIHRoZW4gcmVsZWFzZS4gVGhlICdhY3R1YWwnIHJldGFpbi9yZWxlYXNlIGluIHRoZSBlZmZlY3QgYWJvdmVcbiAgLy8gY2FuY2VscyB0aGlzLlxuXG4gIGNvbnN0IHRpbWVvdXRJRCA9IHVzZVJlZiQzKCk7XG4gIGNvbnN0IHByZXZpb3VzUmV0YWluYWJsZXMgPSBSZWNvaWxfdXNlUHJldmlvdXMocmV0YWluYWJsZXMpO1xuXG4gIGlmICghaXNTU1IkMiAmJiAocHJldmlvdXNSZXRhaW5hYmxlcyA9PT0gdW5kZWZpbmVkIHx8ICFSZWNvaWxfc2hhbGxvd0FycmF5RXF1YWwocHJldmlvdXNSZXRhaW5hYmxlcywgcmV0YWluYWJsZXMpKSkge1xuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcblxuICAgIGZvciAoY29uc3QgciBvZiByZXRhaW5hYmxlcykge1xuICAgICAgdXBkYXRlUmV0YWluQ291bnQkMihzdG9yZSwgciwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzUmV0YWluYWJsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgciBvZiBwcmV2aW91c1JldGFpbmFibGVzKSB7XG4gICAgICAgIHVwZGF0ZVJldGFpbkNvdW50JDIoc3RvcmUsIHIsIC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGltZW91dElELmN1cnJlbnQpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElELmN1cnJlbnQpO1xuICAgIH1cblxuICAgIHRpbWVvdXRJRC5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZW91dElELmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmV0YWluYWJsZXMpIHtcbiAgICAgICAgdXBkYXRlUmV0YWluQ291bnQkMihzdG9yZSwgciwgLTEpO1xuICAgICAgfVxuICAgIH0sIFNVU1BFTlNFX1RJTUVPVVRfTVMkMSk7XG4gIH1cbn1cblxudmFyIFJlY29pbF91c2VSZXRhaW4gPSB1c2VSZXRhaW47XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSBHZW9yZyBUYXZvbml1c1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5jb25zdCBVTktOT1dOX0ZVTkNUSU9OID0gJzx1bmtub3duPic7XG4vKipcbiAqIFRoaXMgcGFyc2VzIHRoZSBkaWZmZXJlbnQgc3RhY2sgdHJhY2VzIGFuZCBwdXRzIHRoZW0gaW50byBvbmUgZm9ybWF0XG4gKiBUaGlzIGJvcnJvd3MgaGVhdmlseSBmcm9tIFRyYWNlS2l0IChodHRwczovL2dpdGh1Yi5jb20vY3Nub3Zlci9UcmFjZUtpdClcbiAqL1xuXG5mdW5jdGlvbiBzdGFja1RyYWNlUGFyc2VyKHN0YWNrU3RyaW5nKSB7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2tTdHJpbmcuc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMucmVkdWNlKChzdGFjaywgbGluZSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gcGFyc2VDaHJvbWUobGluZSkgfHwgcGFyc2VXaW5qcyhsaW5lKSB8fCBwYXJzZUdlY2tvKGxpbmUpIHx8IHBhcnNlTm9kZShsaW5lKSB8fCBwYXJzZUpTQyhsaW5lKTtcblxuICAgIGlmIChwYXJzZVJlc3VsdCkge1xuICAgICAgc3RhY2sucHVzaChwYXJzZVJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9LCBbXSk7XG59XG5cbmNvbnN0IGNocm9tZVJlID0gL15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3w8YW5vbnltb3VzPnxcXC98W2Etel06XFxcXHxcXFxcXFxcXCkuKj8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFwpP1xccyokL2k7XG5jb25zdCBjaHJvbWVFdmFsUmUgPSAvXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ2hyb21lKGxpbmUpIHtcbiAgY29uc3QgcGFydHMgPSBjaHJvbWVSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGlzTmF0aXZlID0gcGFydHNbMl0gJiYgcGFydHNbMl0uaW5kZXhPZignbmF0aXZlJykgPT09IDA7IC8vIHN0YXJ0IG9mIGxpbmVcblxuICBjb25zdCBpc0V2YWwgPSBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCdldmFsJykgPT09IDA7IC8vIHN0YXJ0IG9mIGxpbmVcblxuICBjb25zdCBzdWJtYXRjaCA9IGNocm9tZUV2YWxSZS5leGVjKHBhcnRzWzJdKTtcblxuICBpZiAoaXNFdmFsICYmIHN1Ym1hdGNoICE9IG51bGwpIHtcbiAgICAvLyB0aHJvdyBvdXQgZXZhbCBsaW5lL2NvbHVtbiBhbmQgdXNlIHRvcC1tb3N0IGxpbmUvY29sdW1uIG51bWJlclxuICAgIHBhcnRzWzJdID0gc3VibWF0Y2hbMV07IC8vIHVybFxuXG4gICAgcGFydHNbM10gPSBzdWJtYXRjaFsyXTsgLy8gbGluZVxuXG4gICAgcGFydHNbNF0gPSBzdWJtYXRjaFszXTsgLy8gY29sdW1uXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6ICFpc05hdGl2ZSA/IHBhcnRzWzJdIDogbnVsbCxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogaXNOYXRpdmUgPyBbcGFydHNbMl1dIDogW10sXG4gICAgbGluZU51bWJlcjogcGFydHNbM10gPyArcGFydHNbM10gOiBudWxsLFxuICAgIGNvbHVtbjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsXG4gIH07XG59XG5cbmNvbnN0IHdpbmpzUmUgPSAvXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/LispICk/XFwoPygoPzpmaWxlfG1zLWFwcHh8aHR0cHM/fHdlYnBhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtcblxuZnVuY3Rpb24gcGFyc2VXaW5qcyhsaW5lKSB7XG4gIGNvbnN0IHBhcnRzID0gd2luanNSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZTogcGFydHNbMl0sXG4gICAgbWV0aG9kTmFtZTogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICBhcmd1bWVudHM6IFtdLFxuICAgIGxpbmVOdW1iZXI6ICtwYXJ0c1szXSxcbiAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbFxuICB9O1xufVxuXG5jb25zdCBnZWNrb1JlID0gL15cXHMqKC4qPykoPzpcXCgoLio/KVxcKSk/KD86XnxAKSgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHJlc291cmNlfFxcW25hdGl2ZSkuKj98W15AXSpidW5kbGUpKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFxzKiQvaTtcbmNvbnN0IGdlY2tvRXZhbFJlID0gLyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7XG5cbmZ1bmN0aW9uIHBhcnNlR2Vja28obGluZSkge1xuICBjb25zdCBwYXJ0cyA9IGdlY2tvUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpc0V2YWwgPSBwYXJ0c1szXSAmJiBwYXJ0c1szXS5pbmRleE9mKCcgPiBldmFsJykgPiAtMTtcbiAgY29uc3Qgc3VibWF0Y2ggPSBnZWNrb0V2YWxSZS5leGVjKHBhcnRzWzNdKTtcblxuICBpZiAoaXNFdmFsICYmIHN1Ym1hdGNoICE9IG51bGwpIHtcbiAgICAvLyB0aHJvdyBvdXQgZXZhbCBsaW5lL2NvbHVtbiBhbmQgdXNlIHRvcC1tb3N0IGxpbmUgbnVtYmVyXG4gICAgcGFydHNbM10gPSBzdWJtYXRjaFsxXTtcbiAgICBwYXJ0c1s0XSA9IHN1Ym1hdGNoWzJdO1xuICAgIHBhcnRzWzVdID0gbnVsbDsgLy8gbm8gY29sdW1uIHdoZW4gZXZhbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwYXJ0c1szXSxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogcGFydHNbMl0gPyBwYXJ0c1syXS5zcGxpdCgnLCcpIDogW10sXG4gICAgbGluZU51bWJlcjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsLFxuICAgIGNvbHVtbjogcGFydHNbNV0gPyArcGFydHNbNV0gOiBudWxsXG4gIH07XG59XG5cbmNvbnN0IGphdmFTY3JpcHRDb3JlUmUgPSAvXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2k7XG5cbmZ1bmN0aW9uIHBhcnNlSlNDKGxpbmUpIHtcbiAgY29uc3QgcGFydHMgPSBqYXZhU2NyaXB0Q29yZVJlLmV4ZWMobGluZSk7XG5cbiAgaWYgKCFwYXJ0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwYXJ0c1szXSxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogW10sXG4gICAgbGluZU51bWJlcjogK3BhcnRzWzRdLFxuICAgIGNvbHVtbjogcGFydHNbNV0gPyArcGFydHNbNV0gOiBudWxsXG4gIH07XG59XG5cbmNvbnN0IG5vZGVSZSA9IC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtcblxuZnVuY3Rpb24gcGFyc2VOb2RlKGxpbmUpIHtcbiAgY29uc3QgcGFydHMgPSBub2RlUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6IHBhcnRzWzJdLFxuICAgIG1ldGhvZE5hbWU6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgYXJndW1lbnRzOiBbXSxcbiAgICBsaW5lTnVtYmVyOiArcGFydHNbM10sXG4gICAgY29sdW1uOiBwYXJ0c1s0XSA/ICtwYXJ0c1s0XSA6IG51bGxcbiAgfTtcbn1cblxudmFyIFJlY29pbF9zdGFja1RyYWNlUGFyc2VyID0gc3RhY2tUcmFjZVBhcnNlcjtcblxuY29uc3Qge1xuICB1c2VSZWY6IHVzZVJlZiQ0XG59ID0gcmVhY3Q7XG5cblxuXG5cblxuZnVuY3Rpb24gdXNlQ29tcG9uZW50TmFtZSgpIHtcbiAgY29uc3QgbmFtZVJlZiA9IHVzZVJlZiQ0KCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmIChSZWNvaWxfZ2t4KCdyZWNvaWxfaW5mZXJfY29tcG9uZW50X25hbWVzJykpIHtcbiAgICAgIHZhciBfbmFtZVJlZiRjdXJyZW50O1xuXG4gICAgICBpZiAobmFtZVJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gYmxlc3NlZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsaW5nIFJlYWN0IGNvbXBvbmVudCBmcm9tXG4gICAgICAgIC8vIHdpdGhpbiBhIGhvb2suIFRoaXMgaGFjayB1c2VzIHRoZSBmYWN0IHRoYXQgaG9va3MgbXVzdCBzdGFydCB3aXRoICd1c2UnXG4gICAgICAgIC8vIGFuZCB0aGF0IGhvb2tzIGFyZSBlaXRoZXIgY2FsbGVkIGJ5IFJlYWN0IENvbXBvbmVudHMgb3Igb3RoZXIgaG9va3MuIEl0XG4gICAgICAgIC8vIGZvbGxvd3MgdGhlcmVmb3JlLCB0aGF0IHRvIGZpbmQgdGhlIGNhbGxpbmcgY29tcG9uZW50LCB5b3Ugc2ltcGx5IG5lZWRcbiAgICAgICAgLy8gdG8gbG9vayBkb3duIHRoZSBzdGFjayBhbmQgZmluZCB0aGUgZmlyc3QgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCBzdGFydFxuICAgICAgICAvLyB3aXRoICd1c2UnLiBXZSBhcmUgb25seSBlbmFibGluZyB0aGlzIGluIGRldiBmb3Igbm93LCBzaW5jZSBvbmNlIHRoZVxuICAgICAgICAvLyBjb2RlYmFzZSBpcyBtaW5pZmllZCwgdGhlIG5hbWluZyBhc3N1bXB0aW9ucyBubyBsb25nZXIgaG9sZCB0cnVlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L25vLW5ldy1lcnJvclxuICAgICAgICBjb25zdCBmcmFtZXMgPSBSZWNvaWxfc3RhY2tUcmFjZVBhcnNlcihuZXcgRXJyb3IoKS5zdGFjayk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgICAgbWV0aG9kTmFtZVxuICAgICAgICB9IG9mIGZyYW1lcykge1xuICAgICAgICAgIC8vIEkgb2JzZXJ2ZWQgY2FzZXMgd2hlcmUgdGhlIGZyYW1lIHdhcyBvZiB0aGUgZm9ybSAnT2JqZWN0LnVzZVhYWCdcbiAgICAgICAgICAvLyBoZW5jZSB3aHkgSSdtIHNlYXJjaGluZyBmb3IgaG9va3MgZm9sbG93aW5nIGEgd29yZCBib3VuZGFyeVxuICAgICAgICAgIGlmICghbWV0aG9kTmFtZS5tYXRjaCgvXFxidXNlW15cXGJdKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVSZWYuY3VycmVudCA9IG1ldGhvZE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmFtZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChfbmFtZVJlZiRjdXJyZW50ID0gbmFtZVJlZi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfbmFtZVJlZiRjdXJyZW50ICE9PSB2b2lkIDAgPyBfbmFtZVJlZiRjdXJyZW50IDogJzx1bmFibGUgdG8gZGV0ZXJtaW5lIGNvbXBvbmVudCBuYW1lPic7XG4gICAgfVxuICB9IC8vIEBmYi1vbmx5OiByZXR1cm4gXCI8Y29tcG9uZW50IG5hbWUgb25seSBhdmFpbGFibGUgd2hlbiBib3RoIGluIGRldiBtb2RlIGFuZCB3aGVuIHBhc3NpbmcgR0sgJ3JlY29pbF9pbmZlcl9jb21wb25lbnRfbmFtZXMnPlwiO1xuXG5cbiAgcmV0dXJuICc8Y29tcG9uZW50IG5hbWUgbm90IGF2YWlsYWJsZT4nOyAvLyBAb3NzLW9ubHlcbn1cblxudmFyIFJlY29pbF91c2VDb21wb25lbnROYW1lID0gdXNlQ29tcG9uZW50TmFtZTtcblxuY29uc3Qge1xuICBiYXRjaFVwZGF0ZXM6IGJhdGNoVXBkYXRlcyQyXG59ID0gUmVjb2lsX0JhdGNoaW5nO1xuXG5jb25zdCB7XG4gIERFRkFVTFRfVkFMVUU6IERFRkFVTFRfVkFMVUUkMlxufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIHJlYWN0TW9kZTogcmVhY3RNb2RlJDMsXG4gIHVzZU11dGFibGVTb3VyY2U6IHVzZU11dGFibGVTb3VyY2UkMSxcbiAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDFcbn0gPSBSZWNvaWxfUmVhY3RNb2RlO1xuXG5jb25zdCB7XG4gIHVzZVJlY29pbE11dGFibGVTb3VyY2U6IHVzZVJlY29pbE11dGFibGVTb3VyY2UkMSxcbiAgdXNlU3RvcmVSZWY6IHVzZVN0b3JlUmVmJDJcbn0gPSBSZWNvaWxfUmVjb2lsUm9vdDtcblxuY29uc3Qge1xuICBpc1JlY29pbFZhbHVlOiBpc1JlY29pbFZhbHVlJDJcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWUkMTtcblxuY29uc3Qge1xuICBBYnN0cmFjdFJlY29pbFZhbHVlOiBBYnN0cmFjdFJlY29pbFZhbHVlJDMsXG4gIGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZTogZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDIsXG4gIHNldFJlY29pbFZhbHVlOiBzZXRSZWNvaWxWYWx1ZSQyLFxuICBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlOiBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlJDIsXG4gIHN1YnNjcmliZVRvUmVjb2lsVmFsdWU6IHN1YnNjcmliZVRvUmVjb2lsVmFsdWUkMVxufSA9IFJlY29pbF9SZWNvaWxWYWx1ZUludGVyZmFjZTtcblxuXG5cbmNvbnN0IHtcbiAgdXNlQ2FsbGJhY2s6IHVzZUNhbGxiYWNrJDEsXG4gIHVzZUVmZmVjdDogdXNlRWZmZWN0JDMsXG4gIHVzZU1lbW86IHVzZU1lbW8kMSxcbiAgdXNlUmVmOiB1c2VSZWYkNSxcbiAgdXNlU3RhdGU6IHVzZVN0YXRlJDFcbn0gPSByZWFjdDtcblxuY29uc3Qge1xuICBzZXRCeUFkZGluZ1RvU2V0OiBzZXRCeUFkZGluZ1RvU2V0JDJcbn0gPSBSZWNvaWxfQ29weU9uV3JpdGU7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIGhhbmRsZUxvYWRhYmxlKGxvYWRhYmxlLCByZWNvaWxWYWx1ZSwgc3RvcmVSZWYpIHtcbiAgLy8gV2UgY2FuJ3QganVzdCB0aHJvdyB0aGUgcHJvbWlzZSB3ZSBhcmUgd2FpdGluZyBvbiB0byBTdXNwZW5zZS4gIElmIHRoZVxuICAvLyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgY2hhbmdlIGl0IG1heSBwcm9kdWNlIGEgc3RhdGUgaW4gd2hpY2ggdGhlIGNvbXBvbmVudFxuICAvLyBjYW4gcmVuZGVyLCBidXQgaXQgd291bGQgc3RpbGwgYmUgc3VzcGVuZGVkIG9uIGEgUHJvbWlzZSB0aGF0IG1heSBuZXZlciByZXNvbHZlLlxuICBpZiAobG9hZGFibGUuc3RhdGUgPT09ICdoYXNWYWx1ZScpIHtcbiAgICByZXR1cm4gbG9hZGFibGUuY29udGVudHM7XG4gIH0gZWxzZSBpZiAobG9hZGFibGUuc3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHN0b3JlUmVmLmN1cnJlbnQuZ2V0U3RhdGUoKS5zdXNwZW5kZWRDb21wb25lbnRSZXNvbHZlcnMuYWRkKHJlc29sdmUpO1xuICAgIH0pOyAvLyAkRmxvd0ZpeE1lIEZsb3cocHJvcC1taXNzaW5nKSBmb3IgaW50ZWdyYXRpbmcgd2l0aCB0b29scyB0aGF0IGluc3BlY3QgdGhyb3duIHByb21pc2VzIEBmYi1vbmx5XG4gICAgLy8gQGZiLW9ubHk6IHByb21pc2UuZGlzcGxheU5hbWUgPSBgUmVjb2lsIFN0YXRlOiAke3JlY29pbFZhbHVlLmtleX1gO1xuXG4gICAgdGhyb3cgcHJvbWlzZTtcbiAgfSBlbHNlIGlmIChsb2FkYWJsZS5zdGF0ZSA9PT0gJ2hhc0Vycm9yJykge1xuICAgIHRocm93IGxvYWRhYmxlLmNvbnRlbnRzO1xuICB9IGVsc2Uge1xuICAgIHRocm93IFJlY29pbF9lcnIoYEludmFsaWQgdmFsdWUgb2YgbG9hZGFibGUgYXRvbSBcIiR7cmVjb2lsVmFsdWUua2V5fVwiYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZWNvaWxWYWx1ZShyZWNvaWxWYWx1ZSwgaG9va05hbWUpIHtcbiAgaWYgKCFpc1JlY29pbFZhbHVlJDIocmVjb2lsVmFsdWUpKSB7XG4gICAgdGhyb3cgUmVjb2lsX2VycihgSW52YWxpZCBhcmd1bWVudCB0byAke2hvb2tOYW1lfTogZXhwZWN0ZWQgYW4gYXRvbSBvciBzZWxlY3RvciBidXQgZ290ICR7U3RyaW5nKHJlY29pbFZhbHVlKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhcmlvdXMgdGhpbmdzIGFyZSBicm9rZW4gd2l0aCB1c2VSZWNvaWxJbnRlcmZhY2UsIHBhcnRpY3VsYXJseSBjb25jdXJyZW50XG4gKiBtb2RlLCBSZWFjdCBzdHJpY3QgbW9kZSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGV5IHdpbGwgbm90IGJlIGZpeGVkLlxuICogKi9cbmZ1bmN0aW9uIHVzZVJlY29pbEludGVyZmFjZV9ERVBSRUNBVEVEKCkge1xuICBjb25zdCBjb21wb25lbnROYW1lID0gUmVjb2lsX3VzZUNvbXBvbmVudE5hbWUoKTtcbiAgY29uc3Qgc3RvcmVSZWYgPSB1c2VTdG9yZVJlZiQyKCk7XG4gIGNvbnN0IFssIGZvcmNlVXBkYXRlXSA9IHVzZVN0YXRlJDEoW10pO1xuICBjb25zdCByZWNvaWxWYWx1ZXNVc2VkID0gdXNlUmVmJDUobmV3IFNldCgpKTtcbiAgcmVjb2lsVmFsdWVzVXNlZC5jdXJyZW50ID0gbmV3IFNldCgpOyAvLyBUcmFjayB0aGUgUmVjb2lsVmFsdWVzIHVzZWQganVzdCBkdXJpbmcgdGhpcyByZW5kZXJcblxuICBjb25zdCBwcmV2aW91c1N1YnNjcmlwdGlvbnMgPSB1c2VSZWYkNShuZXcgU2V0KCkpO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gdXNlUmVmJDUobmV3IE1hcCgpKTtcbiAgY29uc3QgdW5zdWJzY3JpYmVGcm9tID0gdXNlQ2FsbGJhY2skMShrZXkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IHN1YnNjcmlwdGlvbnMuY3VycmVudC5nZXQoa2V5KTtcblxuICAgIGlmIChzdWIpIHtcbiAgICAgIHN1Yi5yZWxlYXNlKCk7XG4gICAgICBzdWJzY3JpcHRpb25zLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9LCBbc3Vic2NyaXB0aW9uc10pO1xuICBjb25zdCB1cGRhdGVTdGF0ZSA9IHVzZUNhbGxiYWNrJDEoKF9zdGF0ZSwga2V5KSA9PiB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbnMuY3VycmVudC5oYXMoa2V5KSkge1xuICAgICAgZm9yY2VVcGRhdGUoW10pO1xuICAgIH1cbiAgfSwgW10pOyAvLyBFZmZlY3QgdG8gYWRkL3JlbW92ZSBzdWJzY3JpcHRpb25zIGFzIG5vZGVzIGFyZSB1c2VkXG5cbiAgdXNlRWZmZWN0JDMoKCkgPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcbiAgICBSZWNvaWxfZGlmZmVyZW5jZVNldHMocmVjb2lsVmFsdWVzVXNlZC5jdXJyZW50LCBwcmV2aW91c1N1YnNjcmlwdGlvbnMuY3VycmVudCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMuY3VycmVudC5oYXMoa2V5KSkge1xuICAgICAgICBSZWNvaWxfZXhwZWN0YXRpb25WaW9sYXRpb24oYERvdWJsZSBzdWJzY3JpcHRpb24gdG8gUmVjb2lsVmFsdWUgXCIke2tleX1cImApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YiA9IHN1YnNjcmliZVRvUmVjb2lsVmFsdWUkMShzdG9yZSwgbmV3IEFic3RyYWN0UmVjb2lsVmFsdWUkMyhrZXkpLCBzdGF0ZSA9PiB1cGRhdGVTdGF0ZShzdGF0ZSwga2V5KSwgY29tcG9uZW50TmFtZSk7XG4gICAgICBzdWJzY3JpcHRpb25zLmN1cnJlbnQuc2V0KGtleSwgc3ViKTtcbiAgICAgIC8qKlxuICAgICAgICogU2luY2Ugd2UncmUgc3Vic2NyaWJpbmcgaW4gYW4gZWZmZWN0IHdlIG5lZWQgdG8gdXBkYXRlIHRvIHRoZSBsYXRlc3RcbiAgICAgICAqIHZhbHVlIG9mIHRoZSBhdG9tIHNpbmNlIGl0IG1heSBoYXZlIGNoYW5nZWQgc2luY2Ugd2UgcmVuZGVyZWQuIFdlIGNhblxuICAgICAgICogZ28gYWhlYWQgYW5kIGRvIHRoYXQgbm93LCB1bmxlc3Mgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJhdGNoIC0tXG4gICAgICAgKiBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBkbyBpdCBhdCB0aGUgZW5kIG9mIHRoZSBiYXRjaCwgZHVlIHRvIHRoZVxuICAgICAgICogZm9sbG93aW5nIGVkZ2UgY2FzZTogU3VwcG9zZSBhbiBhdG9tIGlzIHVwZGF0ZWQgaW4gYW5vdGhlciB1c2VFZmZlY3RcbiAgICAgICAqIG9mIHRoaXMgc2FtZSBjb21wb25lbnQuIFRoZW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgb2NjdXI6XG4gICAgICAgKiAxLiBBdG9tIGlzIHVwZGF0ZWQgYW5kIHN1YnMgZmlyZWQgKGJ1dCB3ZSBtYXkgbm90IGJlIHN1YnNjcmliZWRcbiAgICAgICAqICAgIHlldCBkZXBlbmRpbmcgb24gb3JkZXIgb2YgZWZmZWN0cywgc28gd2UgbWlzcyB0aGlzKSBVcGRhdGVkIHZhbHVlXG4gICAgICAgKiAgICBpcyBub3cgaW4gbmV4dFRyZWUsIGJ1dCBub3QgY3VycmVudFRyZWUuXG4gICAgICAgKiAyLiBUaGlzIGVmZmVjdCBoYXBwZW5zLiBXZSBzdWJzY3JpYmUgYW5kIHVwZGF0ZS5cbiAgICAgICAqIDMuIEZyb20gdGhlIHVwZGF0ZSB3ZSByZS1yZW5kZXIgYW5kIHJlYWQgY3VycmVudFRyZWUsIHdpdGggb2xkIHZhbHVlLlxuICAgICAgICogNC4gQmF0Y2hlcidzIGVmZmVjdCBzZXRzIGN1cnJlbnRUcmVlIHRvIG5leHRUcmVlLlxuICAgICAgICogSW4gdGhpcyBzZXF1ZW5jZSB3ZSBtaXNzIHRoZSB1cGRhdGUuIFRvIGF2b2lkIHRoYXQsIGFkZCB0aGUgdXBkYXRlXG4gICAgICAgKiB0byBxdWV1ZWRDb21wb25lbnRDYWxsYmFjayBpZiBhIGJhdGNoIGlzIGluIHByb2dyZXNzLlxuICAgICAgICovXG4gICAgICAvLyBGSVhNRSBkZWxldGUgcXVldWVkQ29tcG9uZW50Q2FsbGJhY2tzX0RFUFJFQ0FURUQgd2hlbiBkZWxldGluZyB1c2VJbnRlcmZhY2UuXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcblxuICAgICAgaWYgKHN0YXRlLm5leHRUcmVlKSB7XG4gICAgICAgIHN0b3JlLmdldFN0YXRlKCkucXVldWVkQ29tcG9uZW50Q2FsbGJhY2tzX0RFUFJFQ0FURUQucHVzaCgoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlU3RhdGUoc3RvcmUuZ2V0U3RhdGUoKSwga2V5KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFJlY29pbF9kaWZmZXJlbmNlU2V0cyhwcmV2aW91c1N1YnNjcmlwdGlvbnMuY3VycmVudCwgcmVjb2lsVmFsdWVzVXNlZC5jdXJyZW50KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB1bnN1YnNjcmliZUZyb20oa2V5KTtcbiAgICB9KTtcbiAgICBwcmV2aW91c1N1YnNjcmlwdGlvbnMuY3VycmVudCA9IHJlY29pbFZhbHVlc1VzZWQuY3VycmVudDtcbiAgfSk7IC8vIEVmZmVjdCB0byB1bnN1YnNjcmliZSBmcm9tIGFsbCB3aGVuIHVubW91bnRpbmdcblxuICB1c2VFZmZlY3QkMygoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmN1cnJlbnQ7IC8vIFJlc3RvcmUgc3Vic2NyaXB0aW9ucyB0aGF0IHdlcmUgY2xlYXJlZCBkdWUgdG8gU3RyaWN0TW9kZSBydW5uaW5nIHRoaXMgZWZmZWN0IHR3aWNlXG5cbiAgICBSZWNvaWxfZGlmZmVyZW5jZVNldHMocmVjb2lsVmFsdWVzVXNlZC5jdXJyZW50LCBuZXcgU2V0KGN1cnJlbnRTdWJzY3JpcHRpb25zLmtleXMoKSkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHN1YiA9IHN1YnNjcmliZVRvUmVjb2lsVmFsdWUkMShzdG9yZVJlZi5jdXJyZW50LCBuZXcgQWJzdHJhY3RSZWNvaWxWYWx1ZSQzKGtleSksIHN0YXRlID0+IHVwZGF0ZVN0YXRlKHN0YXRlLCBrZXkpLCBjb21wb25lbnROYW1lKTtcbiAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb25zLnNldChrZXksIHN1Yik7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IGN1cnJlbnRTdWJzY3JpcHRpb25zLmZvckVhY2goKF8sIGtleSkgPT4gdW5zdWJzY3JpYmVGcm9tKGtleSkpO1xuICB9LCBbY29tcG9uZW50TmFtZSwgc3RvcmVSZWYsIHVuc3Vic2NyaWJlRnJvbSwgdXBkYXRlU3RhdGVdKTtcbiAgcmV0dXJuIHVzZU1lbW8kMSgoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICAgIGZ1bmN0aW9uIHVzZVNldFJlY29pbFN0YXRlKHJlY29pbFN0YXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VTZXRSZWNvaWxTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3VmFsdWVPclVwZGF0ZXIgPT4ge1xuICAgICAgICBzZXRSZWNvaWxWYWx1ZSQyKHN0b3JlUmVmLmN1cnJlbnQsIHJlY29pbFN0YXRlLCBuZXdWYWx1ZU9yVXBkYXRlcik7XG4gICAgICB9O1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuXG5cbiAgICBmdW5jdGlvbiB1c2VSZXNldFJlY29pbFN0YXRlKHJlY29pbFN0YXRlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VSZXNldFJlY29pbFN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiBzZXRSZWNvaWxWYWx1ZSQyKHN0b3JlUmVmLmN1cnJlbnQsIHJlY29pbFN0YXRlLCBERUZBVUxUX1ZBTFVFJDIpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuXG5cbiAgICBmdW5jdGlvbiB1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlKHJlY29pbFZhbHVlKSB7XG4gICAgICB2YXIgX3N0b3JlU3RhdGUkbmV4dFRyZWU7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgdmFsaWRhdGVSZWNvaWxWYWx1ZShyZWNvaWxWYWx1ZSwgJ3VzZVJlY29pbFZhbHVlTG9hZGFibGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWNvaWxWYWx1ZXNVc2VkLmN1cnJlbnQuaGFzKHJlY29pbFZhbHVlLmtleSkpIHtcbiAgICAgICAgcmVjb2lsVmFsdWVzVXNlZC5jdXJyZW50ID0gc2V0QnlBZGRpbmdUb1NldCQyKHJlY29pbFZhbHVlc1VzZWQuY3VycmVudCwgcmVjb2lsVmFsdWUua2V5KTtcbiAgICAgIH0gLy8gVE9ETyBSZXN0b3JlIG9wdGltaXphdGlvbiB0byBtZW1vaXplIGxvb2t1cFxuXG5cbiAgICAgIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZVJlZi5jdXJyZW50LmdldFN0YXRlKCk7XG4gICAgICByZXR1cm4gZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDIoc3RvcmVSZWYuY3VycmVudCwgcmVjb2lsVmFsdWUsIHJlYWN0TW9kZSQzKCkuZWFybHkgPyAoX3N0b3JlU3RhdGUkbmV4dFRyZWUgPSBzdG9yZVN0YXRlLm5leHRUcmVlKSAhPT0gbnVsbCAmJiBfc3RvcmVTdGF0ZSRuZXh0VHJlZSAhPT0gdm9pZCAwID8gX3N0b3JlU3RhdGUkbmV4dFRyZWUgOiBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlIDogc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5cblxuICAgIGZ1bmN0aW9uIHVzZVJlY29pbFZhbHVlKHJlY29pbFZhbHVlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsVmFsdWUsICd1c2VSZWNvaWxWYWx1ZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2FkYWJsZSA9IHVzZVJlY29pbFZhbHVlTG9hZGFibGUocmVjb2lsVmFsdWUpO1xuICAgICAgcmV0dXJuIGhhbmRsZUxvYWRhYmxlKGxvYWRhYmxlLCByZWNvaWxWYWx1ZSwgc3RvcmVSZWYpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuXG5cbiAgICBmdW5jdGlvbiB1c2VSZWNvaWxTdGF0ZShyZWNvaWxTdGF0ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICB2YWxpZGF0ZVJlY29pbFZhbHVlKHJlY29pbFN0YXRlLCAndXNlUmVjb2lsU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt1c2VSZWNvaWxWYWx1ZShyZWNvaWxTdGF0ZSksIHVzZVNldFJlY29pbFN0YXRlKHJlY29pbFN0YXRlKV07XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5cblxuICAgIGZ1bmN0aW9uIHVzZVJlY29pbFN0YXRlTG9hZGFibGUocmVjb2lsU3RhdGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgdmFsaWRhdGVSZWNvaWxWYWx1ZShyZWNvaWxTdGF0ZSwgJ3VzZVJlY29pbFN0YXRlTG9hZGFibGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlKHJlY29pbFN0YXRlKSwgdXNlU2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UmVjb2lsVmFsdWU6IHVzZVJlY29pbFZhbHVlLFxuICAgICAgZ2V0UmVjb2lsVmFsdWVMb2FkYWJsZTogdXNlUmVjb2lsVmFsdWVMb2FkYWJsZSxcbiAgICAgIGdldFJlY29pbFN0YXRlOiB1c2VSZWNvaWxTdGF0ZSxcbiAgICAgIGdldFJlY29pbFN0YXRlTG9hZGFibGU6IHVzZVJlY29pbFN0YXRlTG9hZGFibGUsXG4gICAgICBnZXRTZXRSZWNvaWxTdGF0ZTogdXNlU2V0UmVjb2lsU3RhdGUsXG4gICAgICBnZXRSZXNldFJlY29pbFN0YXRlOiB1c2VSZXNldFJlY29pbFN0YXRlXG4gICAgfTtcbiAgfSwgW3JlY29pbFZhbHVlc1VzZWQsIHN0b3JlUmVmXSk7XG59XG5cbmNvbnN0IHJlY29pbENvbXBvbmVudEdldFJlY29pbFZhbHVlQ291bnRfRk9SX1RFU1RJTkcgPSB7XG4gIGN1cnJlbnQ6IDBcbn07XG5cbmZ1bmN0aW9uIHVzZVJlY29pbFZhbHVlTG9hZGFibGVfU1lOQ19FWFRFUk5BTF9TVE9SRShyZWNvaWxWYWx1ZSkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDIoKTtcbiAgY29uc3QgY29tcG9uZW50TmFtZSA9IFJlY29pbF91c2VDb21wb25lbnROYW1lKCk7XG4gIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlQ2FsbGJhY2skMSgoKSA9PiB7XG4gICAgdmFyIF9zdG9yZVN0YXRlJG5leHRUcmVlMjtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIHJlY29pbENvbXBvbmVudEdldFJlY29pbFZhbHVlQ291bnRfRk9SX1RFU1RJTkcuY3VycmVudCsrO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB0cmVlU3RhdGUgPSByZWFjdE1vZGUkMygpLmVhcmx5ID8gKF9zdG9yZVN0YXRlJG5leHRUcmVlMiA9IHN0b3JlU3RhdGUubmV4dFRyZWUpICE9PSBudWxsICYmIF9zdG9yZVN0YXRlJG5leHRUcmVlMiAhPT0gdm9pZCAwID8gX3N0b3JlU3RhdGUkbmV4dFRyZWUyIDogc3RvcmVTdGF0ZS5jdXJyZW50VHJlZSA6IHN0b3JlU3RhdGUuY3VycmVudFRyZWU7XG4gICAgY29uc3QgbG9hZGFibGUgPSBnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGUkMihzdG9yZSwgcmVjb2lsVmFsdWUsIHRyZWVTdGF0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRhYmxlLFxuICAgICAga2V5OiByZWNvaWxWYWx1ZS5rZXlcbiAgICB9O1xuICB9LCBbc3RvcmVSZWYsIHJlY29pbFZhbHVlXSk7IC8vIE1lbW9pemUgdGhlIHN0YXRlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlcmVuZGVyc1xuXG4gIGNvbnN0IG1lbW9pemVQcmV2aW91c1NuYXBzaG90ID0gdXNlQ2FsbGJhY2skMShnZXRTdGF0ZSA9PiB7XG4gICAgbGV0IHByZXZTdGF0ZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdmFyIF9wcmV2U3RhdGUsIF9wcmV2U3RhdGUyO1xuXG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSBnZXRTdGF0ZSgpO1xuXG4gICAgICBpZiAoKF9wcmV2U3RhdGUgPSBwcmV2U3RhdGUpICE9PSBudWxsICYmIF9wcmV2U3RhdGUgIT09IHZvaWQgMCAmJiBfcHJldlN0YXRlLmxvYWRhYmxlLmlzKG5leHRTdGF0ZS5sb2FkYWJsZSkgJiYgKChfcHJldlN0YXRlMiA9IHByZXZTdGF0ZSkgPT09IG51bGwgfHwgX3ByZXZTdGF0ZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcmV2U3RhdGUyLmtleSkgPT09IG5leHRTdGF0ZS5rZXkpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgcHJldlN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGNvbnN0IGdldE1lbW9pemVkU25hcHNob3QgPSB1c2VNZW1vJDEoKCkgPT4gbWVtb2l6ZVByZXZpb3VzU25hcHNob3QoZ2V0U25hcHNob3QpLCBbZ2V0U25hcHNob3QsIG1lbW9pemVQcmV2aW91c1NuYXBzaG90XSk7XG4gIGNvbnN0IHN1YnNjcmliZSA9IHVzZUNhbGxiYWNrJDEobm90aWZ5ID0+IHtcbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZWNvaWxWYWx1ZSQxKHN0b3JlLCByZWNvaWxWYWx1ZSwgbm90aWZ5LCBjb21wb25lbnROYW1lKTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uLnJlbGVhc2U7XG4gIH0sIFtzdG9yZVJlZiwgcmVjb2lsVmFsdWUsIGNvbXBvbmVudE5hbWVdKTtcbiAgcmV0dXJuIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDEoc3Vic2NyaWJlLCBnZXRNZW1vaXplZFNuYXBzaG90LCAvLyBnZXRTbmFwc2hvdCgpXG4gIGdldE1lbW9pemVkU25hcHNob3QgLy8gZ2V0U2VydmVyU25hcHNob3QoKSBmb3IgU1NSIHN1cHBvcnRcbiAgKS5sb2FkYWJsZTtcbn1cblxuZnVuY3Rpb24gdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9NVVRBQkxFX1NPVVJDRShyZWNvaWxWYWx1ZSkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDIoKTtcbiAgY29uc3QgZ2V0TG9hZGFibGUgPSB1c2VDYWxsYmFjayQxKCgpID0+IHtcbiAgICB2YXIgX3N0b3JlU3RhdGUkbmV4dFRyZWUzO1xuXG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHRyZWVTdGF0ZSA9IHJlYWN0TW9kZSQzKCkuZWFybHkgPyAoX3N0b3JlU3RhdGUkbmV4dFRyZWUzID0gc3RvcmVTdGF0ZS5uZXh0VHJlZSkgIT09IG51bGwgJiYgX3N0b3JlU3RhdGUkbmV4dFRyZWUzICE9PSB2b2lkIDAgPyBfc3RvcmVTdGF0ZSRuZXh0VHJlZTMgOiBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlIDogc3RvcmVTdGF0ZS5jdXJyZW50VHJlZTtcbiAgICByZXR1cm4gZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDIoc3RvcmUsIHJlY29pbFZhbHVlLCB0cmVlU3RhdGUpO1xuICB9LCBbc3RvcmVSZWYsIHJlY29pbFZhbHVlXSk7XG4gIGNvbnN0IGdldExvYWRhYmxlV2l0aFRlc3RpbmcgPSB1c2VDYWxsYmFjayQxKCgpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICByZWNvaWxDb21wb25lbnRHZXRSZWNvaWxWYWx1ZUNvdW50X0ZPUl9URVNUSU5HLmN1cnJlbnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TG9hZGFibGUoKTtcbiAgfSwgW2dldExvYWRhYmxlXSk7XG4gIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBSZWNvaWxfdXNlQ29tcG9uZW50TmFtZSgpO1xuICBjb25zdCBzdWJzY3JpYmUgPSB1c2VDYWxsYmFjayQxKChfc3RvcmVTdGF0ZSwgbm90aWZ5KSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZVRvUmVjb2lsVmFsdWUkMShzdG9yZSwgcmVjb2lsVmFsdWUsICgpID0+IHtcbiAgICAgIGlmICghUmVjb2lsX2dreCgncmVjb2lsX3N1cHByZXNzX3JlcmVuZGVyX2luX2NhbGxiYWNrJykpIHtcbiAgICAgICAgcmV0dXJuIG5vdGlmeSgpO1xuICAgICAgfSAvLyBPbmx5IHJlLXJlbmRlciBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHdpbGwgZXZhbHVhdGUgdGhlIGF0b20vc2VsZWN0b3Igbm93IGFzIHdlbGwgYXMgd2hlbiB0aGVcbiAgICAgIC8vIGNvbXBvbmVudCByZW5kZXJzLCBidXQgdGhhdCBtYXkgaGVscCB3aXRoIHByZWZldGNoaW5nLlxuXG5cbiAgICAgIGNvbnN0IG5ld0xvYWRhYmxlID0gZ2V0TG9hZGFibGUoKTtcblxuICAgICAgaWYgKCFwcmV2TG9hZGFibGVSZWYuY3VycmVudC5pcyhuZXdMb2FkYWJsZSkpIHtcbiAgICAgICAgbm90aWZ5KCk7XG4gICAgICB9IC8vIElmIHRoZSBjb21wb25lbnQgaXMgc3VzcGVuZGVkIHRoZW4gdGhlIGVmZmVjdCBzZXR0aW5nIHByZXZMb2FkYWJsZVJlZlxuICAgICAgLy8gd2lsbCBub3QgcnVuLiAgU28sIHNldCB0aGUgcHJldmlvdXMgdmFsdWUgaGVyZSB3aGVuIGl0cyBzdWJzY3JpcHRpb25cbiAgICAgIC8vIGlzIGZpcmVkIHRvIHdha2UgaXQgdXAuICBXZSBjYW4ndCBqdXN0IHJlbHkgb24gdGhpcywgdGhvdWdoLCBiZWNhdXNlXG4gICAgICAvLyB0aGlzIG9ubHkgZXhlY3V0ZXMgd2hlbiBhbiBhdG9tL3NlbGVjdG9yIGlzIGRpcnR5IGFuZCB0aGUgYXRvbS9zZWxlY3RvclxuICAgICAgLy8gcGFzc2VkIHRvIHRoZSBob29rIGNhbiBkeW5hbWljYWxseSBjaGFuZ2UuXG5cblxuICAgICAgcHJldkxvYWRhYmxlUmVmLmN1cnJlbnQgPSBuZXdMb2FkYWJsZTtcbiAgICB9LCBjb21wb25lbnROYW1lKTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uLnJlbGVhc2U7XG4gIH0sIFtzdG9yZVJlZiwgcmVjb2lsVmFsdWUsIGNvbXBvbmVudE5hbWUsIGdldExvYWRhYmxlXSk7XG4gIGNvbnN0IHNvdXJjZSA9IHVzZVJlY29pbE11dGFibGVTb3VyY2UkMSgpO1xuXG4gIGlmIChzb3VyY2UgPT0gbnVsbCkge1xuICAgIHRocm93IFJlY29pbF9lcnIoJ1JlY29pbCBob29rcyBtdXN0IGJlIHVzZWQgaW4gY29tcG9uZW50cyBjb250YWluZWQgd2l0aGluIGEgPFJlY29pbFJvb3Q+IGNvbXBvbmVudC4nKTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRhYmxlID0gdXNlTXV0YWJsZVNvdXJjZSQxKHNvdXJjZSwgZ2V0TG9hZGFibGVXaXRoVGVzdGluZywgc3Vic2NyaWJlKTtcbiAgY29uc3QgcHJldkxvYWRhYmxlUmVmID0gdXNlUmVmJDUobG9hZGFibGUpO1xuICB1c2VFZmZlY3QkMygoKSA9PiB7XG4gICAgcHJldkxvYWRhYmxlUmVmLmN1cnJlbnQgPSBsb2FkYWJsZTtcbiAgfSk7XG4gIHJldHVybiBsb2FkYWJsZTtcbn1cblxuZnVuY3Rpb24gdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlQocmVjb2lsVmFsdWUpIHtcbiAgY29uc3Qgc3RvcmVSZWYgPSB1c2VTdG9yZVJlZiQyKCk7XG4gIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBSZWNvaWxfdXNlQ29tcG9uZW50TmFtZSgpOyAvLyBBY2Nlc3NvcnMgdG8gZ2V0IHRoZSBjdXJyZW50IHN0YXRlXG5cbiAgY29uc3QgZ2V0TG9hZGFibGUgPSB1c2VDYWxsYmFjayQxKCgpID0+IHtcbiAgICB2YXIgX3N0b3JlU3RhdGUkbmV4dFRyZWU0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgcmVjb2lsQ29tcG9uZW50R2V0UmVjb2lsVmFsdWVDb3VudF9GT1JfVEVTVElORy5jdXJyZW50Kys7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHRyZWVTdGF0ZSA9IHJlYWN0TW9kZSQzKCkuZWFybHkgPyAoX3N0b3JlU3RhdGUkbmV4dFRyZWU0ID0gc3RvcmVTdGF0ZS5uZXh0VHJlZSkgIT09IG51bGwgJiYgX3N0b3JlU3RhdGUkbmV4dFRyZWU0ICE9PSB2b2lkIDAgPyBfc3RvcmVTdGF0ZSRuZXh0VHJlZTQgOiBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlIDogc3RvcmVTdGF0ZS5jdXJyZW50VHJlZTtcbiAgICByZXR1cm4gZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDIoc3RvcmUsIHJlY29pbFZhbHVlLCB0cmVlU3RhdGUpO1xuICB9LCBbc3RvcmVSZWYsIHJlY29pbFZhbHVlXSk7XG4gIGNvbnN0IGdldFN0YXRlID0gdXNlQ2FsbGJhY2skMSgoKSA9PiAoe1xuICAgIGxvYWRhYmxlOiBnZXRMb2FkYWJsZSgpLFxuICAgIGtleTogcmVjb2lsVmFsdWUua2V5XG4gIH0pLCBbZ2V0TG9hZGFibGUsIHJlY29pbFZhbHVlLmtleV0pOyAvLyBNZW1vaXplIHN0YXRlIHNuYXBzaG90c1xuXG4gIGNvbnN0IHVwZGF0ZVN0YXRlID0gdXNlQ2FsbGJhY2skMShwcmV2U3RhdGUgPT4ge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHByZXZTdGF0ZS5sb2FkYWJsZS5pcyhuZXh0U3RhdGUubG9hZGFibGUpICYmIHByZXZTdGF0ZS5rZXkgPT09IG5leHRTdGF0ZS5rZXkgPyBwcmV2U3RhdGUgOiBuZXh0U3RhdGU7XG4gIH0sIFtnZXRTdGF0ZV0pOyAvLyBTdWJzY3JpYmUgdG8gUmVjb2lsIHN0YXRlIGNoYW5nZXNcblxuICB1c2VFZmZlY3QkMygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZWNvaWxWYWx1ZSQxKHN0b3JlUmVmLmN1cnJlbnQsIHJlY29pbFZhbHVlLCBfc3RhdGUgPT4ge1xuICAgICAgc2V0U3RhdGUodXBkYXRlU3RhdGUpO1xuICAgIH0sIGNvbXBvbmVudE5hbWUpOyAvLyBVcGRhdGUgc3RhdGUgaW4gY2FzZSB3ZSBhcmUgdXNpbmcgYSBkaWZmZXJlbnQga2V5XG5cbiAgICBzZXRTdGF0ZSh1cGRhdGVTdGF0ZSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5yZWxlYXNlO1xuICB9LCBbY29tcG9uZW50TmFtZSwgcmVjb2lsVmFsdWUsIHN0b3JlUmVmLCB1cGRhdGVTdGF0ZV0pOyAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGVcblxuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlJDEoZ2V0U3RhdGUpOyAvLyBJZiB3ZSBjaGFuZ2VkIGtleXMsIHRoZW4gcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIG5ldyBrZXkuXG4gIC8vIFRoaXMgaXMgaW1wb3J0YW50IGluIGNhc2UgdGhlIG9sZCBrZXkgd291bGQgY2F1c2UgdGhlIGNvbXBvbmVudCB0byBzdXNwZW5kLlxuICAvLyBXZSBkb24ndCBoYXZlIHRvIHNldCB0aGUgbmV3IHN0YXRlIGhlcmUgc2luY2UgdGhlIHN1YnNjcmliaW5nIGVmZmVjdCBhYm92ZVxuICAvLyB3aWxsIGRvIHRoYXQuXG5cbiAgcmV0dXJuIHN0YXRlLmtleSAhPT0gcmVjb2lsVmFsdWUua2V5ID8gZ2V0U3RhdGUoKS5sb2FkYWJsZSA6IHN0YXRlLmxvYWRhYmxlO1xufVxuXG5mdW5jdGlvbiB1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlX0xFR0FDWShyZWNvaWxWYWx1ZSkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDIoKTtcbiAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlU3RhdGUkMShbXSk7XG4gIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBSZWNvaWxfdXNlQ29tcG9uZW50TmFtZSgpO1xuICBjb25zdCBnZXRMb2FkYWJsZSA9IHVzZUNhbGxiYWNrJDEoKCkgPT4ge1xuICAgIHZhciBfc3RvcmVTdGF0ZSRuZXh0VHJlZTU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICByZWNvaWxDb21wb25lbnRHZXRSZWNvaWxWYWx1ZUNvdW50X0ZPUl9URVNUSU5HLmN1cnJlbnQrKztcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qgc3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3QgdHJlZVN0YXRlID0gcmVhY3RNb2RlJDMoKS5lYXJseSA/IChfc3RvcmVTdGF0ZSRuZXh0VHJlZTUgPSBzdG9yZVN0YXRlLm5leHRUcmVlKSAhPT0gbnVsbCAmJiBfc3RvcmVTdGF0ZSRuZXh0VHJlZTUgIT09IHZvaWQgMCA/IF9zdG9yZVN0YXRlJG5leHRUcmVlNSA6IHN0b3JlU3RhdGUuY3VycmVudFRyZWUgOiBzdG9yZVN0YXRlLmN1cnJlbnRUcmVlO1xuICAgIHJldHVybiBnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGUkMihzdG9yZSwgcmVjb2lsVmFsdWUsIHRyZWVTdGF0ZSk7XG4gIH0sIFtzdG9yZVJlZiwgcmVjb2lsVmFsdWVdKTtcbiAgY29uc3QgbG9hZGFibGUgPSBnZXRMb2FkYWJsZSgpO1xuICBjb25zdCBwcmV2TG9hZGFibGVSZWYgPSB1c2VSZWYkNShsb2FkYWJsZSk7XG4gIHVzZUVmZmVjdCQzKCgpID0+IHtcbiAgICBwcmV2TG9hZGFibGVSZWYuY3VycmVudCA9IGxvYWRhYmxlO1xuICB9KTtcbiAgdXNlRWZmZWN0JDMoKCkgPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1JlY29pbFZhbHVlJDEoc3RvcmUsIHJlY29pbFZhbHVlLCBfc3RhdGUgPT4ge1xuICAgICAgdmFyIF9wcmV2TG9hZGFibGVSZWYkY3VycjtcblxuICAgICAgaWYgKCFSZWNvaWxfZ2t4KCdyZWNvaWxfc3VwcHJlc3NfcmVyZW5kZXJfaW5fY2FsbGJhY2snKSkge1xuICAgICAgICByZXR1cm4gZm9yY2VVcGRhdGUoW10pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdMb2FkYWJsZSA9IGdldExvYWRhYmxlKCk7XG5cbiAgICAgIGlmICghKChfcHJldkxvYWRhYmxlUmVmJGN1cnIgPSBwcmV2TG9hZGFibGVSZWYuY3VycmVudCkgIT09IG51bGwgJiYgX3ByZXZMb2FkYWJsZVJlZiRjdXJyICE9PSB2b2lkIDAgJiYgX3ByZXZMb2FkYWJsZVJlZiRjdXJyLmlzKG5ld0xvYWRhYmxlKSkpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUobmV3TG9hZGFibGUpO1xuICAgICAgfVxuXG4gICAgICBwcmV2TG9hZGFibGVSZWYuY3VycmVudCA9IG5ld0xvYWRhYmxlO1xuICAgIH0sIGNvbXBvbmVudE5hbWUpO1xuICAgIC8qKlxuICAgICAqIFNpbmNlIHdlJ3JlIHN1YnNjcmliaW5nIGluIGFuIGVmZmVjdCB3ZSBuZWVkIHRvIHVwZGF0ZSB0byB0aGUgbGF0ZXN0XG4gICAgICogdmFsdWUgb2YgdGhlIGF0b20gc2luY2UgaXQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSByZW5kZXJlZC4gV2UgY2FuXG4gICAgICogZ28gYWhlYWQgYW5kIGRvIHRoYXQgbm93LCB1bmxlc3Mgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJhdGNoIC0tXG4gICAgICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgZG8gaXQgYXQgdGhlIGVuZCBvZiB0aGUgYmF0Y2gsIGR1ZSB0byB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZWRnZSBjYXNlOiBTdXBwb3NlIGFuIGF0b20gaXMgdXBkYXRlZCBpbiBhbm90aGVyIHVzZUVmZmVjdFxuICAgICAqIG9mIHRoaXMgc2FtZSBjb21wb25lbnQuIFRoZW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBldmVudHMgb2NjdXI6XG4gICAgICogMS4gQXRvbSBpcyB1cGRhdGVkIGFuZCBzdWJzIGZpcmVkIChidXQgd2UgbWF5IG5vdCBiZSBzdWJzY3JpYmVkXG4gICAgICogICAgeWV0IGRlcGVuZGluZyBvbiBvcmRlciBvZiBlZmZlY3RzLCBzbyB3ZSBtaXNzIHRoaXMpIFVwZGF0ZWQgdmFsdWVcbiAgICAgKiAgICBpcyBub3cgaW4gbmV4dFRyZWUsIGJ1dCBub3QgY3VycmVudFRyZWUuXG4gICAgICogMi4gVGhpcyBlZmZlY3QgaGFwcGVucy4gV2Ugc3Vic2NyaWJlIGFuZCB1cGRhdGUuXG4gICAgICogMy4gRnJvbSB0aGUgdXBkYXRlIHdlIHJlLXJlbmRlciBhbmQgcmVhZCBjdXJyZW50VHJlZSwgd2l0aCBvbGQgdmFsdWUuXG4gICAgICogNC4gQmF0Y2hlcidzIGVmZmVjdCBzZXRzIGN1cnJlbnRUcmVlIHRvIG5leHRUcmVlLlxuICAgICAqIEluIHRoaXMgc2VxdWVuY2Ugd2UgbWlzcyB0aGUgdXBkYXRlLiBUbyBhdm9pZCB0aGF0LCBhZGQgdGhlIHVwZGF0ZVxuICAgICAqIHRvIHF1ZXVlZENvbXBvbmVudENhbGxiYWNrIGlmIGEgYmF0Y2ggaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICovXG5cbiAgICBpZiAoc3RvcmVTdGF0ZS5uZXh0VHJlZSkge1xuICAgICAgc3RvcmUuZ2V0U3RhdGUoKS5xdWV1ZWRDb21wb25lbnRDYWxsYmFja3NfREVQUkVDQVRFRC5wdXNoKCgpID0+IHtcbiAgICAgICAgcHJldkxvYWRhYmxlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb3JjZVVwZGF0ZShbXSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9wcmV2TG9hZGFibGVSZWYkY3VycjI7XG5cbiAgICAgIGlmICghUmVjb2lsX2dreCgncmVjb2lsX3N1cHByZXNzX3JlcmVuZGVyX2luX2NhbGxiYWNrJykpIHtcbiAgICAgICAgcmV0dXJuIGZvcmNlVXBkYXRlKFtdKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3TG9hZGFibGUgPSBnZXRMb2FkYWJsZSgpO1xuXG4gICAgICBpZiAoISgoX3ByZXZMb2FkYWJsZVJlZiRjdXJyMiA9IHByZXZMb2FkYWJsZVJlZi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfcHJldkxvYWRhYmxlUmVmJGN1cnIyICE9PSB2b2lkIDAgJiYgX3ByZXZMb2FkYWJsZVJlZiRjdXJyMi5pcyhuZXdMb2FkYWJsZSkpKSB7XG4gICAgICAgIGZvcmNlVXBkYXRlKG5ld0xvYWRhYmxlKTtcbiAgICAgIH1cblxuICAgICAgcHJldkxvYWRhYmxlUmVmLmN1cnJlbnQgPSBuZXdMb2FkYWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uLnJlbGVhc2U7XG4gIH0sIFtjb21wb25lbnROYW1lLCBnZXRMb2FkYWJsZSwgcmVjb2lsVmFsdWUsIHN0b3JlUmVmXSk7XG4gIHJldHVybiBsb2FkYWJsZTtcbn1cbi8qKlxuICBMaWtlIHVzZVJlY29pbFZhbHVlKCksIGJ1dCBlaXRoZXIgcmV0dXJucyB0aGUgdmFsdWUgaWYgYXZhaWxhYmxlIG9yXG4gIGp1c3QgdW5kZWZpbmVkIGlmIG5vdCBhdmFpbGFibGUgZm9yIGFueSByZWFzb24sIHN1Y2ggYXMgcGVuZGluZyBvciBlcnJvci5cbiovXG5cblxuZnVuY3Rpb24gdXNlUmVjb2lsVmFsdWVMb2FkYWJsZShyZWNvaWxWYWx1ZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFsaWRhdGVSZWNvaWxWYWx1ZShyZWNvaWxWYWx1ZSwgJ3VzZVJlY29pbFZhbHVlTG9hZGFibGUnKTtcbiAgfVxuXG4gIGlmIChSZWNvaWxfZ2t4KCdyZWNvaWxfbWVtb3J5X21hbmFnYW1lbnRfMjAyMCcpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZiLXd3dy9yZWFjdC1ob29rc1xuICAgIFJlY29pbF91c2VSZXRhaW4ocmVjb2lsVmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBUUkFOU0lUSU9OX1NVUFBPUlQ6IHVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JULFxuICAgIFNZTkNfRVhURVJOQUxfU1RPUkU6IHVzZVJlY29pbFZhbHVlTG9hZGFibGVfU1lOQ19FWFRFUk5BTF9TVE9SRSxcbiAgICBNVVRBQkxFX1NPVVJDRTogdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9NVVRBQkxFX1NPVVJDRSxcbiAgICBMRUdBQ1k6IHVzZVJlY29pbFZhbHVlTG9hZGFibGVfTEVHQUNZXG4gIH1bcmVhY3RNb2RlJDMoKS5tb2RlXShyZWNvaWxWYWx1ZSk7XG59XG4vKipcbiAgUmV0dXJucyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIFJlY29pbFZhbHVlLlxuICBJZiB0aGUgdmFsdWUgaXMgcGVuZGluZywgaXQgd2lsbCB0aHJvdyBhIFByb21pc2UgdG8gc3VzcGVuZCB0aGUgY29tcG9uZW50LFxuICBpZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IgaXQgd2lsbCB0aHJvdyBpdCBmb3IgdGhlIG5lYXJlc3QgUmVhY3QgZXJyb3IgYm91bmRhcnkuXG4gIFRoaXMgd2lsbCBhbHNvIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IGZvciBhbnkgdXBkYXRlcyBpbiB0aGUgdmFsdWUuXG4gICovXG5cblxuZnVuY3Rpb24gdXNlUmVjb2lsVmFsdWUocmVjb2lsVmFsdWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsVmFsdWUsICd1c2VSZWNvaWxWYWx1ZScpO1xuICB9XG5cbiAgY29uc3Qgc3RvcmVSZWYgPSB1c2VTdG9yZVJlZiQyKCk7XG4gIGNvbnN0IGxvYWRhYmxlID0gdXNlUmVjb2lsVmFsdWVMb2FkYWJsZShyZWNvaWxWYWx1ZSk7XG4gIHJldHVybiBoYW5kbGVMb2FkYWJsZShsb2FkYWJsZSwgcmVjb2lsVmFsdWUsIHN0b3JlUmVmKTtcbn1cbi8qKlxuICBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhbGxvd3MgdGhlIHZhbHVlIG9mIGEgUmVjb2lsU3RhdGUgdG8gYmUgdXBkYXRlZCwgYnV0IGRvZXNcbiAgbm90IHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIGNoYW5nZXMgdG8gdGhhdCBSZWNvaWxTdGF0ZS5cbiovXG5cblxuZnVuY3Rpb24gdXNlU2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VTZXRSZWNvaWxTdGF0ZScpO1xuICB9XG5cbiAgY29uc3Qgc3RvcmVSZWYgPSB1c2VTdG9yZVJlZiQyKCk7XG4gIHJldHVybiB1c2VDYWxsYmFjayQxKG5ld1ZhbHVlT3JVcGRhdGVyID0+IHtcbiAgICBzZXRSZWNvaWxWYWx1ZSQyKHN0b3JlUmVmLmN1cnJlbnQsIHJlY29pbFN0YXRlLCBuZXdWYWx1ZU9yVXBkYXRlcik7XG4gIH0sIFtzdG9yZVJlZiwgcmVjb2lsU3RhdGVdKTtcbn1cbi8qKlxuICBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHJlc2V0IHRoZSB2YWx1ZSBvZiBhIFJlY29pbFN0YXRlIHRvIGl0cyBkZWZhdWx0XG4qL1xuXG5cbmZ1bmN0aW9uIHVzZVJlc2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VSZXNldFJlY29pbFN0YXRlJyk7XG4gIH1cblxuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDIoKTtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrJDEoKCkgPT4ge1xuICAgIHNldFJlY29pbFZhbHVlJDIoc3RvcmVSZWYuY3VycmVudCwgcmVjb2lsU3RhdGUsIERFRkFVTFRfVkFMVUUkMik7XG4gIH0sIFtzdG9yZVJlZiwgcmVjb2lsU3RhdGVdKTtcbn1cbi8qKlxuICBFcXVpdmFsZW50IHRvIHVzZVN0YXRlKCkuIEFsbG93cyB0aGUgdmFsdWUgb2YgdGhlIFJlY29pbFN0YXRlIHRvIGJlIHJlYWQgYW5kIHdyaXR0ZW4uXG4gIFN1YnNlcXVlbnQgdXBkYXRlcyB0byB0aGUgUmVjb2lsU3RhdGUgd2lsbCBjYXVzZSB0aGUgY29tcG9uZW50IHRvIHJlLXJlbmRlci4gSWYgdGhlXG4gIFJlY29pbFN0YXRlIGlzIHBlbmRpbmcsIHRoaXMgd2lsbCBzdXNwZW5kIHRoZSBjb21wb25lbnQgYW5kIGluaXRpYXRlIHRoZVxuICByZXRyaWV2YWwgb2YgdGhlIHZhbHVlLiBJZiBldmFsdWF0aW5nIHRoZSBSZWNvaWxTdGF0ZSByZXN1bHRlZCBpbiBhbiBlcnJvciwgdGhpcyB3aWxsXG4gIHRocm93IHRoZSBlcnJvciBzbyB0aGF0IHRoZSBuZWFyZXN0IFJlYWN0IGVycm9yIGJvdW5kYXJ5IGNhbiBjYXRjaCBpdC5cbiovXG5cblxuZnVuY3Rpb24gdXNlUmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VSZWNvaWxTdGF0ZScpO1xuICB9XG5cbiAgcmV0dXJuIFt1c2VSZWNvaWxWYWx1ZShyZWNvaWxTdGF0ZSksIHVzZVNldFJlY29pbFN0YXRlKHJlY29pbFN0YXRlKV07XG59XG4vKipcbiAgTGlrZSB1c2VSZWNvaWxTdGF0ZSgpLCBidXQgZG9lcyBub3QgY2F1c2UgU3VzcGVuc2Ugb3IgUmVhY3QgZXJyb3IgaGFuZGxpbmcuIFJldHVybnNcbiAgYW4gb2JqZWN0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFJlY29pbFN0YXRlIGlzIGF2YWlsYWJsZSwgcGVuZGluZywgb3JcbiAgdW5hdmFpbGFibGUgZHVlIHRvIGFuIGVycm9yLlxuKi9cblxuXG5mdW5jdGlvbiB1c2VSZWNvaWxTdGF0ZUxvYWRhYmxlKHJlY29pbFN0YXRlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB2YWxpZGF0ZVJlY29pbFZhbHVlKHJlY29pbFN0YXRlLCAndXNlUmVjb2lsU3RhdGVMb2FkYWJsZScpO1xuICB9XG5cbiAgcmV0dXJuIFt1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlKHJlY29pbFN0YXRlKSwgdXNlU2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpXTtcbn1cblxuZnVuY3Rpb24gdXNlU2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVzKCkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDIoKTtcbiAgcmV0dXJuICh2YWx1ZXMsIHRyYW5zYWN0aW9uTWV0YWRhdGEgPSB7fSkgPT4ge1xuICAgIGJhdGNoVXBkYXRlcyQyKCgpID0+IHtcbiAgICAgIHN0b3JlUmVmLmN1cnJlbnQuYWRkVHJhbnNhY3Rpb25NZXRhZGF0YSh0cmFuc2FjdGlvbk1ldGFkYXRhKTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiBzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlJDIoc3RvcmVSZWYuY3VycmVudCwgbmV3IEFic3RyYWN0UmVjb2lsVmFsdWUkMyhrZXkpLCB2YWx1ZSkpO1xuICAgIH0pO1xuICB9O1xufVxuLyoqXG4gKiBFeHBlcmltZW50YWwgdmFyaWFudHMgb2YgaG9va3Mgd2l0aCBzdXBwb3J0IGZvciB1c2VUcmFuc2l0aW9uKClcbiAqL1xuXG5cbmZ1bmN0aW9uIHVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFKHJlY29pbFZhbHVlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB2YWxpZGF0ZVJlY29pbFZhbHVlKHJlY29pbFZhbHVlLCAndXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUnKTtcblxuICAgIGlmICghcmVhY3RNb2RlJDMoKS5lYXJseSkge1xuICAgICAgUmVjb2lsX3JlY292ZXJhYmxlVmlvbGF0aW9uKCdBdHRlcG10IHRvIHVzZSBhIGhvb2sgd2l0aCBVTlNUQUJMRV9UUkFOU0lUSU9OX1NVUFBPUlQgaW4gYSByZW5kZXJpbmcgbW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb25jdXJyZW50IHJlbmRlcmluZy4gIFRyeSBlbmFibGluZyB0aGUgcmVjb2lsX3N5bmNfZXh0ZXJuYWxfc3RvcmUgb3IgcmVjb2lsX3RyYW5zaXRpb25fc3VwcG9ydCBHS3MuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKFJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L3JlYWN0LWhvb2tzXG4gICAgUmVjb2lsX3VzZVJldGFpbihyZWNvaWxWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlQocmVjb2lsVmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWNvaWxWYWx1ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUocmVjb2lsVmFsdWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsVmFsdWUsICd1c2VSZWNvaWxWYWx1ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUnKTtcbiAgfVxuXG4gIGNvbnN0IHN0b3JlUmVmID0gdXNlU3RvcmVSZWYkMigpO1xuICBjb25zdCBsb2FkYWJsZSA9IHVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFKHJlY29pbFZhbHVlKTtcbiAgcmV0dXJuIGhhbmRsZUxvYWRhYmxlKGxvYWRhYmxlLCByZWNvaWxWYWx1ZSwgc3RvcmVSZWYpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWNvaWxTdGF0ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUocmVjb2lsU3RhdGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhbGlkYXRlUmVjb2lsVmFsdWUocmVjb2lsU3RhdGUsICd1c2VSZWNvaWxTdGF0ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUnKTtcbiAgfVxuXG4gIHJldHVybiBbdXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFKHJlY29pbFN0YXRlKSwgdXNlU2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUpXTtcbn1cblxudmFyIFJlY29pbF9Ib29rcyA9IHtcbiAgcmVjb2lsQ29tcG9uZW50R2V0UmVjb2lsVmFsdWVDb3VudF9GT1JfVEVTVElORyxcbiAgdXNlUmVjb2lsSW50ZXJmYWNlOiB1c2VSZWNvaWxJbnRlcmZhY2VfREVQUkVDQVRFRCxcbiAgdXNlUmVjb2lsU3RhdGUsXG4gIHVzZVJlY29pbFN0YXRlTG9hZGFibGUsXG4gIHVzZVJlY29pbFZhbHVlLFxuICB1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlLFxuICB1c2VSZXNldFJlY29pbFN0YXRlLFxuICB1c2VTZXRSZWNvaWxTdGF0ZSxcbiAgdXNlU2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVzLFxuICB1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRSxcbiAgdXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFLFxuICB1c2VSZWNvaWxTdGF0ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEVcbn07XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGEgbWFwIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBrZXlzICsgdmFsdWVzIGZyb20gdGhlIG9yaWdpbmFsIG1hcCB3aGVyZVxuICogdGhlIGdpdmVuIGNhbGxiYWNrIHJldHVybmVkIHRydWUuXG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyTWFwKG1hcCwgY2FsbGJhY2spIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG1hcCkge1xuICAgIGlmIChjYWxsYmFjayh2YWx1ZSwga2V5KSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgUmVjb2lsX2ZpbHRlck1hcCA9IGZpbHRlck1hcDtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZW1haWxzIG9uY2FsbCtyZWNvaWxcbiAqIFxuICogQGZvcm1hdFxuICovXG4vKipcbiAqIFJldHVybnMgYSBzZXQgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBzZXQgd2hlcmVcbiAqIHRoZSBnaXZlbiBjYWxsYmFjayByZXR1cm5lZCB0cnVlLlxuICovXG5cbmZ1bmN0aW9uIGZpbHRlclNldChzZXQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNldCkge1xuICAgIGlmIChjYWxsYmFjayh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdC5hZGQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBSZWNvaWxfZmlsdGVyU2V0ID0gZmlsdGVyU2V0O1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKi9cblxuZnVuY3Rpb24gbWVyZ2VNYXBzKC4uLm1hcHMpIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gbWFwc1tpXS5rZXlzKCk7XG4gICAgbGV0IG5leHRLZXk7XG5cbiAgICB3aGlsZSAoIShuZXh0S2V5ID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSAtIG1hcC9pdGVyYXRvciBrbm93cyBub3RoaW5nIGFib3V0IGZsb3cgdHlwZXNcbiAgICAgIHJlc3VsdC5zZXQobmV4dEtleS52YWx1ZSwgbWFwc1tpXS5nZXQobmV4dEtleS52YWx1ZSkpO1xuICAgIH1cbiAgfVxuICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dICg+PTAuNjYuMCBzaXRlPXd3dyxtb2JpbGUpIFRoaXMgY29tbWVudFxuICAgKiBzdXBwcmVzc2VzIGFuIGVycm9yIGZvdW5kIHdoZW4gRmxvdyB2MC42NiB3YXMgZGVwbG95ZWQuIFRvIHNlZSB0aGUgZXJyb3JcbiAgICogZGVsZXRlIHRoaXMgY29tbWVudCBhbmQgcnVuIEZsb3cuICovXG5cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgUmVjb2lsX21lcmdlTWFwcyA9IG1lcmdlTWFwcztcblxuY29uc3Qge1xuICBiYXRjaFVwZGF0ZXM6IGJhdGNoVXBkYXRlcyQzXG59ID0gUmVjb2lsX0JhdGNoaW5nO1xuXG5jb25zdCB7XG4gIERFRkFVTFRfVkFMVUU6IERFRkFVTFRfVkFMVUUkMyxcbiAgZ2V0Tm9kZTogZ2V0Tm9kZSQ0LFxuICBub2Rlczogbm9kZXMkMVxufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIHVzZVN0b3JlUmVmOiB1c2VTdG9yZVJlZiQzXG59ID0gUmVjb2lsX1JlY29pbFJvb3Q7XG5cbmNvbnN0IHtcbiAgQWJzdHJhY3RSZWNvaWxWYWx1ZTogQWJzdHJhY3RSZWNvaWxWYWx1ZSQ0LFxuICBzZXRSZWNvaWxWYWx1ZUxvYWRhYmxlOiBzZXRSZWNvaWxWYWx1ZUxvYWRhYmxlJDFcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2U7XG5cbmNvbnN0IHtcbiAgU1VTUEVOU0VfVElNRU9VVF9NUzogU1VTUEVOU0VfVElNRU9VVF9NUyQyXG59ID0gUmVjb2lsX1JldGVudGlvbjtcblxuY29uc3Qge1xuICBjbG9uZVNuYXBzaG90OiBjbG9uZVNuYXBzaG90JDFcbn0gPSBSZWNvaWxfU25hcHNob3QkMTtcblxuY29uc3Qge1xuICB1c2VDYWxsYmFjazogdXNlQ2FsbGJhY2skMixcbiAgdXNlRWZmZWN0OiB1c2VFZmZlY3QkNCxcbiAgdXNlUmVmOiB1c2VSZWYkNixcbiAgdXNlU3RhdGU6IHVzZVN0YXRlJDJcbn0gPSByZWFjdDtcblxuY29uc3Qge1xuICBpc1NTUjogaXNTU1IkM1xufSA9IFJlY29pbF9FbnZpcm9ubWVudDtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmZ1bmN0aW9uIHVzZVRyYW5zYWN0aW9uU3Vic2NyaXB0aW9uKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN0b3JlUmVmID0gdXNlU3RvcmVSZWYkMygpO1xuICB1c2VFZmZlY3QkNCgoKSA9PiB7XG4gICAgY29uc3Qgc3ViID0gc3RvcmVSZWYuY3VycmVudC5zdWJzY3JpYmVUb1RyYW5zYWN0aW9ucyhjYWxsYmFjayk7XG4gICAgcmV0dXJuIHN1Yi5yZWxlYXNlO1xuICB9LCBbY2FsbGJhY2ssIHN0b3JlUmVmXSk7XG59XG5cbmZ1bmN0aW9uIGV4dGVybmFsbHlWaXNpYmxlQXRvbVZhbHVlc0luU3RhdGUoc3RhdGUpIHtcbiAgY29uc3QgYXRvbVZhbHVlcyA9IHN0YXRlLmF0b21WYWx1ZXMudG9NYXAoKTtcbiAgY29uc3QgcGVyc2lzdGVkQXRvbUNvbnRlbnRzVmFsdWVzID0gUmVjb2lsX21hcE1hcChSZWNvaWxfZmlsdGVyTWFwKGF0b21WYWx1ZXMsICh2LCBrKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGUkNChrKTtcbiAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IG5vZGUucGVyc2lzdGVuY2VfVU5TVEFCTEU7XG4gICAgcmV0dXJuIHBlcnNpc3RlbmNlICE9IG51bGwgJiYgcGVyc2lzdGVuY2UudHlwZSAhPT0gJ25vbmUnICYmIHYuc3RhdGUgPT09ICdoYXNWYWx1ZSc7XG4gIH0pLCB2ID0+IHYuY29udGVudHMpOyAvLyBNZXJnZSBpbiBub252YWxpZGF0ZWQgYXRvbXM7IHdlIG1heSBub3QgaGF2ZSBkZWZzIGZvciB0aGVtIGJ1dCB0aGV5IHdpbGxcbiAgLy8gYWxsIGhhdmUgcGVyc2lzdGVuY2Ugb24gb3IgdGhleSB3b3VsZG4ndCBiZSB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cbiAgcmV0dXJuIFJlY29pbF9tZXJnZU1hcHMoc3RhdGUubm9udmFsaWRhdGVkQXRvbXMudG9NYXAoKSwgcGVyc2lzdGVkQXRvbUNvbnRlbnRzVmFsdWVzKTtcbn1cblxuLyoqXG4gIENhbGxzIHRoZSBnaXZlbiBjYWxsYmFjayBhZnRlciBhbnkgYXRvbXMgaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgY29uc2VxdWVudFxuICBjb21wb25lbnQgcmUtcmVuZGVycyBoYXZlIGJlZW4gY29tbWl0dGVkLiBUaGlzIGlzIGludGVuZGVkIGZvciBwZXJzaXN0aW5nXG4gIHRoZSB2YWx1ZXMgb2YgdGhlIGF0b21zIHRvIHN0b3JhZ2UuIFRoZSBzdG9yZWQgdmFsdWVzIGNhbiB0aGVuIGJlIHJlc3RvcmVkXG4gIHVzaW5nIHRoZSB1c2VTZXRVbnZhbGlkYXRlZEF0b21WYWx1ZXMgaG9vay5cblxuICBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIGZvbGxvd2luZyBpbmZvOlxuXG4gIGF0b21WYWx1ZXM6IFRoZSBjdXJyZW50IHZhbHVlIG9mIGV2ZXJ5IGF0b20gdGhhdCBpcyBib3RoIHBlcnNpc3RhYmxlIChwZXJzaXN0ZW5jZVxuICAgICAgICAgICAgICB0eXBlIG5vdCBzZXQgdG8gJ25vbmUnKSBhbmQgd2hvc2UgdmFsdWUgaXMgYXZhaWxhYmxlIChub3QgaW4gYW5cbiAgICAgICAgICAgICAgZXJyb3Igb3IgbG9hZGluZyBzdGF0ZSkuXG5cbiAgcHJldmlvdXNBdG9tVmFsdWVzOiBUaGUgdmFsdWUgb2YgZXZlcnkgcGVyc2lzdGFibGUgYW5kIGF2YWlsYWJsZSBhdG9tIGJlZm9yZVxuICAgICAgICAgICAgICAgdGhlIHRyYW5zYWN0aW9uIGJlZ2FuLlxuXG4gIGF0b21JbmZvOiBBIG1hcCBjb250YWluaW5nIHRoZSBwZXJzaXN0ZW5jZSBzZXR0aW5ncyBmb3IgZWFjaCBhdG9tLiBFdmVyeSBrZXlcbiAgICAgICAgICAgIHRoYXQgZXhpc3RzIGluIGF0b21WYWx1ZXMgd2lsbCBhbHNvIGV4aXN0IGluIGF0b21JbmZvLlxuXG4gIG1vZGlmaWVkQXRvbXM6IFRoZSBzZXQgb2YgYXRvbXMgdGhhdCB3ZXJlIHdyaXR0ZW4gdG8gZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi5cblxuICB0cmFuc2FjdGlvbk1ldGFkYXRhOiBBcmJpdHJhcnkgaW5mb3JtYXRpb24gdGhhdCB3YXMgYWRkZWQgdmlhIHRoZVxuICAgICAgICAgIHVzZVNldFVudmFsaWRhdGVkQXRvbVZhbHVlcyBob29rLiBVc2VmdWwgZm9yIGlnbm9yaW5nIHRoZSB1c2VTZXRVbnZhbGlkYXRlZEF0b21WYWx1ZXNcbiAgICAgICAgICB0cmFuc2FjdGlvbiwgdG8gYXZvaWQgbG9vcHMuXG4qL1xuZnVuY3Rpb24gdXNlVHJhbnNhY3Rpb25PYnNlcnZhdGlvbl9ERVBSRUNBVEVEKGNhbGxiYWNrKSB7XG4gIHVzZVRyYW5zYWN0aW9uU3Vic2NyaXB0aW9uKHVzZUNhbGxiYWNrJDIoc3RvcmUgPT4ge1xuICAgIGxldCBwcmV2aW91c1RyZWUgPSBzdG9yZS5nZXRTdGF0ZSgpLnByZXZpb3VzVHJlZTtcbiAgICBjb25zdCBjdXJyZW50VHJlZSA9IHN0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWU7XG5cbiAgICBpZiAoIXByZXZpb3VzVHJlZSkge1xuICAgICAgUmVjb2lsX3JlY292ZXJhYmxlVmlvbGF0aW9uKCdUcmFuc2FjdGlvbiBzdWJzY3JpYmVycyBub3RpZmllZCB3aXRob3V0IGEgcHJldmlvdXMgdHJlZSBiZWluZyBwcmVzZW50IC0tIHRoaXMgaXMgYSBidWcgaW4gUmVjb2lsJyk7XG4gICAgICBwcmV2aW91c1RyZWUgPSBzdG9yZS5nZXRTdGF0ZSgpLmN1cnJlbnRUcmVlOyAvLyBhdHRlbXB0IHRvIHRydW5kbGUgb25cbiAgICB9XG5cbiAgICBjb25zdCBhdG9tVmFsdWVzID0gZXh0ZXJuYWxseVZpc2libGVBdG9tVmFsdWVzSW5TdGF0ZShjdXJyZW50VHJlZSk7XG4gICAgY29uc3QgcHJldmlvdXNBdG9tVmFsdWVzID0gZXh0ZXJuYWxseVZpc2libGVBdG9tVmFsdWVzSW5TdGF0ZShwcmV2aW91c1RyZWUpO1xuICAgIGNvbnN0IGF0b21JbmZvID0gUmVjb2lsX21hcE1hcChub2RlcyQxLCBub2RlID0+IHtcbiAgICAgIHZhciBfbm9kZSRwZXJzaXN0ZW5jZV9VTlMsIF9ub2RlJHBlcnNpc3RlbmNlX1VOUzIsIF9ub2RlJHBlcnNpc3RlbmNlX1VOUzMsIF9ub2RlJHBlcnNpc3RlbmNlX1VOUzQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBlcnNpc3RlbmNlX1VOU1RBQkxFOiB7XG4gICAgICAgICAgdHlwZTogKF9ub2RlJHBlcnNpc3RlbmNlX1VOUyA9IChfbm9kZSRwZXJzaXN0ZW5jZV9VTlMyID0gbm9kZS5wZXJzaXN0ZW5jZV9VTlNUQUJMRSkgPT09IG51bGwgfHwgX25vZGUkcGVyc2lzdGVuY2VfVU5TMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25vZGUkcGVyc2lzdGVuY2VfVU5TMi50eXBlKSAhPT0gbnVsbCAmJiBfbm9kZSRwZXJzaXN0ZW5jZV9VTlMgIT09IHZvaWQgMCA/IF9ub2RlJHBlcnNpc3RlbmNlX1VOUyA6ICdub25lJyxcbiAgICAgICAgICBiYWNrQnV0dG9uOiAoX25vZGUkcGVyc2lzdGVuY2VfVU5TMyA9IChfbm9kZSRwZXJzaXN0ZW5jZV9VTlM0ID0gbm9kZS5wZXJzaXN0ZW5jZV9VTlNUQUJMRSkgPT09IG51bGwgfHwgX25vZGUkcGVyc2lzdGVuY2VfVU5TNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25vZGUkcGVyc2lzdGVuY2VfVU5TNC5iYWNrQnV0dG9uKSAhPT0gbnVsbCAmJiBfbm9kZSRwZXJzaXN0ZW5jZV9VTlMzICE9PSB2b2lkIDAgPyBfbm9kZSRwZXJzaXN0ZW5jZV9VTlMzIDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTsgLy8gRmlsdGVyIG9uIGV4aXN0YW5jZSBpbiBhdG9tVmFsdWVzIHNvIHRoYXQgZXh0ZXJuYWxseS12aXNpYmxlIHJ1bGVzXG4gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBtb2RpZmllZCBhdG9tcyAoc3BlY2lmaWNhbGx5IGV4Y2x1ZGUgc2VsZWN0b3JzKTpcblxuICAgIGNvbnN0IG1vZGlmaWVkQXRvbXMgPSBSZWNvaWxfZmlsdGVyU2V0KGN1cnJlbnRUcmVlLmRpcnR5QXRvbXMsIGsgPT4gYXRvbVZhbHVlcy5oYXMoaykgfHwgcHJldmlvdXNBdG9tVmFsdWVzLmhhcyhrKSk7XG4gICAgY2FsbGJhY2soe1xuICAgICAgYXRvbVZhbHVlcyxcbiAgICAgIHByZXZpb3VzQXRvbVZhbHVlcyxcbiAgICAgIGF0b21JbmZvLFxuICAgICAgbW9kaWZpZWRBdG9tcyxcbiAgICAgIHRyYW5zYWN0aW9uTWV0YWRhdGE6IHsgLi4uY3VycmVudFRyZWUudHJhbnNhY3Rpb25NZXRhZGF0YVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBbY2FsbGJhY2tdKSk7XG59XG5cbmZ1bmN0aW9uIHVzZVJlY29pbFRyYW5zYWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spIHtcbiAgdXNlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb24odXNlQ2FsbGJhY2skMihzdG9yZSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBjbG9uZVNuYXBzaG90JDEoc3RvcmUsICdjdXJyZW50Jyk7XG4gICAgY29uc3QgcHJldmlvdXNTbmFwc2hvdCA9IGNsb25lU25hcHNob3QkMShzdG9yZSwgJ3ByZXZpb3VzJyk7XG4gICAgY2FsbGJhY2soe1xuICAgICAgc25hcHNob3QsXG4gICAgICBwcmV2aW91c1NuYXBzaG90XG4gICAgfSk7XG4gIH0sIFtjYWxsYmFja10pKTtcbn0gLy8gUmV0dXJuIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHN1YnNjcmliZSB0byBhbGwgc3RhdGUgY2hhbmdlc1xuXG5cbmZ1bmN0aW9uIHVzZVJlY29pbFNuYXBzaG90KCkge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDMoKTtcbiAgY29uc3QgW3NuYXBzaG90LCBzZXRTbmFwc2hvdF0gPSB1c2VTdGF0ZSQyKCgpID0+IGNsb25lU25hcHNob3QkMShzdG9yZVJlZi5jdXJyZW50KSk7XG4gIGNvbnN0IHByZXZpb3VzU25hcHNob3QgPSBSZWNvaWxfdXNlUHJldmlvdXMoc25hcHNob3QpO1xuICBjb25zdCB0aW1lb3V0SUQgPSB1c2VSZWYkNigpO1xuICBjb25zdCByZWxlYXNlUmVmID0gdXNlUmVmJDYoKTtcbiAgdXNlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb24odXNlQ2FsbGJhY2skMihzdG9yZSA9PiBzZXRTbmFwc2hvdChjbG9uZVNuYXBzaG90JDEoc3RvcmUpKSwgW10pKTsgLy8gUmV0YWluIHNuYXBzaG90IGZvciBkdXJhdGlvbiBjb21wb25lbnQgaXMgbW91bnRlZFxuXG4gIHVzZUVmZmVjdCQ0KCgpID0+IHtcbiAgICBjb25zdCByZWxlYXNlID0gc25hcHNob3QucmV0YWluKCk7IC8vIFJlbGVhc2UgdGhlIHJldGFpbiBmcm9tIHRoZSByZW5kZXJpbmcgY2FsbFxuXG4gICAgaWYgKHRpbWVvdXRJRC5jdXJyZW50ICYmICFpc1NTUiQzKSB7XG4gICAgICB2YXIgX3JlbGVhc2VSZWYkY3VycmVudDtcblxuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SUQuY3VycmVudCk7XG4gICAgICB0aW1lb3V0SUQuY3VycmVudCA9IG51bGw7XG4gICAgICAoX3JlbGVhc2VSZWYkY3VycmVudCA9IHJlbGVhc2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3JlbGVhc2VSZWYkY3VycmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3JlbGVhc2VSZWYkY3VycmVudC5jYWxsKHJlbGVhc2VSZWYpO1xuICAgICAgcmVsZWFzZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsZWFzZTtcbiAgfSwgW3NuYXBzaG90XSk7IC8vIFJldGFpbiBzbmFwc2hvdCB1bnRpbCBhYm92ZSBlZmZlY3QgaXMgcnVuLlxuICAvLyBSZWxlYXNlIGFmdGVyIGEgdGhyZXNob2xkIGluIGNhc2UgY29tcG9uZW50IGlzIHN1c3BlbmRlZC5cblxuICBpZiAocHJldmlvdXNTbmFwc2hvdCAhPT0gc25hcHNob3QgJiYgIWlzU1NSJDMpIHtcbiAgICAvLyBSZWxlYXNlIHRoZSBwcmV2aW91cyBzbmFwc2hvdFxuICAgIGlmICh0aW1lb3V0SUQuY3VycmVudCkge1xuICAgICAgdmFyIF9yZWxlYXNlUmVmJGN1cnJlbnQyO1xuXG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJRC5jdXJyZW50KTtcbiAgICAgIHRpbWVvdXRJRC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIChfcmVsZWFzZVJlZiRjdXJyZW50MiA9IHJlbGVhc2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3JlbGVhc2VSZWYkY3VycmVudDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9yZWxlYXNlUmVmJGN1cnJlbnQyLmNhbGwocmVsZWFzZVJlZik7XG4gICAgICByZWxlYXNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHJlbGVhc2VSZWYuY3VycmVudCA9IHNuYXBzaG90LnJldGFpbigpO1xuICAgIHRpbWVvdXRJRC5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9yZWxlYXNlUmVmJGN1cnJlbnQzO1xuXG4gICAgICB0aW1lb3V0SUQuY3VycmVudCA9IG51bGw7XG4gICAgICAoX3JlbGVhc2VSZWYkY3VycmVudDMgPSByZWxlYXNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9yZWxlYXNlUmVmJGN1cnJlbnQzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcmVsZWFzZVJlZiRjdXJyZW50My5jYWxsKHJlbGVhc2VSZWYpO1xuICAgICAgcmVsZWFzZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9LCBTVVNQRU5TRV9USU1FT1VUX01TJDIpO1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBnb3RvU25hcHNob3Qoc3RvcmUsIHNuYXBzaG90KSB7XG4gIHZhciBfc3RvcmVTdGF0ZSRuZXh0VHJlZTtcblxuICBjb25zdCBzdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgY29uc3QgcHJldiA9IChfc3RvcmVTdGF0ZSRuZXh0VHJlZSA9IHN0b3JlU3RhdGUubmV4dFRyZWUpICE9PSBudWxsICYmIF9zdG9yZVN0YXRlJG5leHRUcmVlICE9PSB2b2lkIDAgPyBfc3RvcmVTdGF0ZSRuZXh0VHJlZSA6IHN0b3JlU3RhdGUuY3VycmVudFRyZWU7XG4gIGNvbnN0IG5leHQgPSBzbmFwc2hvdC5nZXRTdG9yZV9JTlRFUk5BTCgpLmdldFN0YXRlKCkuY3VycmVudFRyZWU7XG4gIGJhdGNoVXBkYXRlcyQzKCgpID0+IHtcbiAgICBjb25zdCBrZXlzVG9VcGRhdGUgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleXMgb2YgW3ByZXYuYXRvbVZhbHVlcy5rZXlzKCksIG5leHQuYXRvbVZhbHVlcy5rZXlzKCldKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHZhciBfcHJldiRhdG9tVmFsdWVzJGdldCwgX25leHQkYXRvbVZhbHVlcyRnZXQ7XG5cbiAgICAgICAgaWYgKCgoX3ByZXYkYXRvbVZhbHVlcyRnZXQgPSBwcmV2LmF0b21WYWx1ZXMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9wcmV2JGF0b21WYWx1ZXMkZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcHJldiRhdG9tVmFsdWVzJGdldC5jb250ZW50cykgIT09ICgoX25leHQkYXRvbVZhbHVlcyRnZXQgPSBuZXh0LmF0b21WYWx1ZXMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9uZXh0JGF0b21WYWx1ZXMkZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmV4dCRhdG9tVmFsdWVzJGdldC5jb250ZW50cykgJiYgZ2V0Tm9kZSQ0KGtleSkuc2hvdWxkUmVzdG9yZUZyb21TbmFwc2hvdHMpIHtcbiAgICAgICAgICBrZXlzVG9VcGRhdGUuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBrZXlzVG9VcGRhdGUuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgc2V0UmVjb2lsVmFsdWVMb2FkYWJsZSQxKHN0b3JlLCBuZXcgQWJzdHJhY3RSZWNvaWxWYWx1ZSQ0KGtleSksIG5leHQuYXRvbVZhbHVlcy5oYXMoa2V5KSA/IFJlY29pbF9udWxsdGhyb3dzKG5leHQuYXRvbVZhbHVlcy5nZXQoa2V5KSkgOiBERUZBVUxUX1ZBTFVFJDMpO1xuICAgIH0pO1xuICAgIHN0b3JlLnJlcGxhY2VTdGF0ZShzdGF0ZSA9PiAoeyAuLi5zdGF0ZSxcbiAgICAgIHN0YXRlSUQ6IHNuYXBzaG90LmdldElEKClcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VHb3RvUmVjb2lsU25hcHNob3QoKSB7XG4gIGNvbnN0IHN0b3JlUmVmID0gdXNlU3RvcmVSZWYkMygpO1xuICByZXR1cm4gdXNlQ2FsbGJhY2skMihzbmFwc2hvdCA9PiBnb3RvU25hcHNob3Qoc3RvcmVSZWYuY3VycmVudCwgc25hcHNob3QpLCBbc3RvcmVSZWZdKTtcbn1cblxudmFyIFJlY29pbF9TbmFwc2hvdEhvb2tzID0ge1xuICB1c2VSZWNvaWxTbmFwc2hvdCxcbiAgZ290b1NuYXBzaG90LFxuICB1c2VHb3RvUmVjb2lsU25hcHNob3QsXG4gIHVzZVJlY29pbFRyYW5zYWN0aW9uT2JzZXJ2ZXIsXG4gIHVzZVRyYW5zYWN0aW9uT2JzZXJ2YXRpb25fREVQUkVDQVRFRCxcbiAgdXNlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25fREVQUkVDQVRFRDogdXNlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25cbn07XG5cbmNvbnN0IHtcbiAgcGVla05vZGVJbmZvOiBwZWVrTm9kZUluZm8kMlxufSA9IFJlY29pbF9GdW5jdGlvbmFsQ29yZTtcblxuY29uc3Qge1xuICB1c2VTdG9yZVJlZjogdXNlU3RvcmVSZWYkNFxufSA9IFJlY29pbF9SZWNvaWxSb290O1xuXG5mdW5jdGlvbiB1c2VHZXRSZWNvaWxWYWx1ZUluZm8oKSB7XG4gIGNvbnN0IHN0b3JlUmVmID0gdXNlU3RvcmVSZWYkNCgpO1xuICByZXR1cm4gKHtcbiAgICBrZXlcbiAgfSkgPT4gcGVla05vZGVJbmZvJDIoc3RvcmVSZWYuY3VycmVudCwgc3RvcmVSZWYuY3VycmVudC5nZXRTdGF0ZSgpLmN1cnJlbnRUcmVlLCBrZXkpO1xufVxuXG52YXIgUmVjb2lsX3VzZUdldFJlY29pbFZhbHVlSW5mbyA9IHVzZUdldFJlY29pbFZhbHVlSW5mbztcblxuY29uc3Qge1xuICByZWFjdE1vZGU6IHJlYWN0TW9kZSQ0XG59ID0gUmVjb2lsX1JlYWN0TW9kZTtcblxuY29uc3Qge1xuICBSZWNvaWxSb290OiBSZWNvaWxSb290JDEsXG4gIHVzZVN0b3JlUmVmOiB1c2VTdG9yZVJlZiQ1XG59ID0gUmVjb2lsX1JlY29pbFJvb3Q7XG5cblxuXG5jb25zdCB7XG4gIHVzZU1lbW86IHVzZU1lbW8kMlxufSA9IHJlYWN0O1xuXG5mdW5jdGlvbiB1c2VSZWNvaWxCcmlkZ2VBY3Jvc3NSZWFjdFJvb3RzKCkge1xuICAvLyBUaGUgdGVzdCBmYWlscyB3aGVuIHVzaW5nIHVzZU11dGFibGVTb3VyY2UoKSwgYnV0IG9ubHkgaWYgYWN0KCkgaXMgdXNlZFxuICAvLyBmb3IgdGhlIG5lc3RlZCByb290LiAgU28sIHRoaXMgbWF5IG9ubHkgYmUgYSB0ZXN0aW5nIGVudmlyb25tZW50IGlzc3VlLlxuICBpZiAocmVhY3RNb2RlJDQoKS5tb2RlID09PSAnTVVUQUJMRV9TT1VSQ0UnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZiLXd3dy9uby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBUaGVyZSBhcmUga25vd24gaXNzdWVzIHVzaW5nIHVzZVJlY29pbEJyaWRnZUFjcm9zc1JlYWN0Um9vdHMoKSBpbiByZWNvaWxfbXV0YWJsZV9zb3VyY2UgcmVuZGVyaW5nIG1vZGUuICBQbGVhc2UgY29uc2lkZXIgdXBncmFkaW5nIHRvIHJlY29pbF9zeW5jX2V4dGVybmFsX3N0b3JlIG1vZGUuJyk7XG4gIH1cblxuICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlUmVmJDUoKS5jdXJyZW50O1xuICByZXR1cm4gdXNlTWVtbyQyKCgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgZnVuY3Rpb24gUmVjb2lsQnJpZGdlKHtcbiAgICAgIGNoaWxkcmVuXG4gICAgfSkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdC5jcmVhdGVFbGVtZW50KFJlY29pbFJvb3QkMSwge1xuICAgICAgICBzdG9yZV9JTlRFUk5BTDogc3RvcmVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVjb2lsQnJpZGdlO1xuICB9LCBbc3RvcmVdKTtcbn1cblxudmFyIFJlY29pbF91c2VSZWNvaWxCcmlkZ2VBY3Jvc3NSZWFjdFJvb3RzID0gdXNlUmVjb2lsQnJpZGdlQWNyb3NzUmVhY3RSb290cztcblxuY29uc3Qge1xuICBsb2FkYWJsZVdpdGhWYWx1ZTogbG9hZGFibGVXaXRoVmFsdWUkMVxufSA9IFJlY29pbF9Mb2FkYWJsZSQxO1xuXG5jb25zdCB7XG4gIGluaXRpYWxpemVOb2RlOiBpbml0aWFsaXplTm9kZSQzXG59ID0gUmVjb2lsX0Z1bmN0aW9uYWxDb3JlO1xuXG5jb25zdCB7XG4gIERFRkFVTFRfVkFMVUU6IERFRkFVTFRfVkFMVUUkNCxcbiAgZ2V0Tm9kZTogZ2V0Tm9kZSQ1XG59ID0gUmVjb2lsX05vZGU7XG5cbmNvbnN0IHtcbiAgY29weVRyZWVTdGF0ZTogY29weVRyZWVTdGF0ZSQxLFxuICBnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGU6IGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZSQzLFxuICBpbnZhbGlkYXRlRG93bnN0cmVhbXM6IGludmFsaWRhdGVEb3duc3RyZWFtcyQxLFxuICB3cml0ZUxvYWRhYmxlVG9UcmVlU3RhdGU6IHdyaXRlTG9hZGFibGVUb1RyZWVTdGF0ZSQxXG59ID0gUmVjb2lsX1JlY29pbFZhbHVlSW50ZXJmYWNlO1xuXG5cblxuZnVuY3Rpb24gaXNBdG9tKHJlY29pbFZhbHVlKSB7XG4gIHJldHVybiBnZXROb2RlJDUocmVjb2lsVmFsdWUua2V5KS5ub2RlVHlwZSA9PT0gJ2F0b20nO1xufVxuXG5jbGFzcyBUcmFuc2FjdGlvbkludGVyZmFjZUltcGwge1xuICBjb25zdHJ1Y3RvcihzdG9yZSwgdHJlZVN0YXRlKSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX3N0b3JlXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfdHJlZVN0YXRlXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfY2hhbmdlc1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2V0XCIsIHJlY29pbFZhbHVlID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFuZ2VzLmhhcyhyZWNvaWxWYWx1ZS5rZXkpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZXMuZ2V0KHJlY29pbFZhbHVlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBdG9tKHJlY29pbFZhbHVlKSkge1xuICAgICAgICB0aHJvdyBSZWNvaWxfZXJyKCdSZWFkaW5nIHNlbGVjdG9ycyB3aXRoaW4gYXRvbWljVXBkYXRlIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZGFibGUgPSBnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGUkMyh0aGlzLl9zdG9yZSwgcmVjb2lsVmFsdWUsIHRoaXMuX3RyZWVTdGF0ZSk7XG5cbiAgICAgIGlmIChsb2FkYWJsZS5zdGF0ZSA9PT0gJ2hhc1ZhbHVlJykge1xuICAgICAgICByZXR1cm4gbG9hZGFibGUuY29udGVudHM7XG4gICAgICB9IGVsc2UgaWYgKGxvYWRhYmxlLnN0YXRlID09PSAnaGFzRXJyb3InKSB7XG4gICAgICAgIHRocm93IGxvYWRhYmxlLmNvbnRlbnRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2VycihgRXhwZWN0ZWQgUmVjb2lsIGF0b20gJHtyZWNvaWxWYWx1ZS5rZXl9IHRvIGhhdmUgYSB2YWx1ZSwgYnV0IGl0IGlzIGluIGEgbG9hZGluZyBzdGF0ZS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNldFwiLCAocmVjb2lsU3RhdGUsIHZhbHVlT3JVcGRhdGVyKSA9PiB7XG4gICAgICBpZiAoIWlzQXRvbShyZWNvaWxTdGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2VycignU2V0dGluZyBzZWxlY3RvcnMgd2l0aGluIGF0b21pY1VwZGF0ZSBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWVPclVwZGF0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KHJlY29pbFN0YXRlKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VzLnNldChyZWNvaWxTdGF0ZS5rZXksIHZhbHVlT3JVcGRhdGVyKGN1cnJlbnQpKTsgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgYXRvbSBhbmQgcnVuIGVmZmVjdHMgaWYgbm90IGluaXRpYWxpemVkIHlldFxuICAgICAgICBpbml0aWFsaXplTm9kZSQzKHRoaXMuX3N0b3JlLCByZWNvaWxTdGF0ZS5rZXksICdzZXQnKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VzLnNldChyZWNvaWxTdGF0ZS5rZXksIHZhbHVlT3JVcGRhdGVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc2V0XCIsIHJlY29pbFN0YXRlID0+IHtcbiAgICAgIHRoaXMuc2V0KHJlY29pbFN0YXRlLCBERUZBVUxUX1ZBTFVFJDQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcbiAgICB0aGlzLl90cmVlU3RhdGUgPSB0cmVlU3RhdGU7XG4gICAgdGhpcy5fY2hhbmdlcyA9IG5ldyBNYXAoKTtcbiAgfSAvLyBBbGxvdyBkZXN0cnVjdGluZ1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmItd3d3L2V4dHJhLWFycm93LWluaXRpYWxpemVyXG5cblxuICBuZXdUcmVlU3RhdGVfSU5URVJOQUwoKSB7XG4gICAgaWYgKHRoaXMuX2NoYW5nZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyZWVTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZSA9IGNvcHlUcmVlU3RhdGUkMSh0aGlzLl90cmVlU3RhdGUpO1xuXG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5fY2hhbmdlcykge1xuICAgICAgd3JpdGVMb2FkYWJsZVRvVHJlZVN0YXRlJDEobmV3U3RhdGUsIGssIGxvYWRhYmxlV2l0aFZhbHVlJDEodikpO1xuICAgIH1cblxuICAgIGludmFsaWRhdGVEb3duc3RyZWFtcyQxKHRoaXMuX3N0b3JlLCBuZXdTdGF0ZSk7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gYXRvbWljVXBkYXRlcihzdG9yZSkge1xuICByZXR1cm4gZm4gPT4ge1xuICAgIHN0b3JlLnJlcGxhY2VTdGF0ZSh0cmVlU3RhdGUgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlc2V0ID0gbmV3IFRyYW5zYWN0aW9uSW50ZXJmYWNlSW1wbChzdG9yZSwgdHJlZVN0YXRlKTtcbiAgICAgIGZuKGNoYW5nZXNldCk7XG4gICAgICByZXR1cm4gY2hhbmdlc2V0Lm5ld1RyZWVTdGF0ZV9JTlRFUk5BTCgpO1xuICAgIH0pO1xuICB9O1xufVxuXG52YXIgUmVjb2lsX0F0b21pY1VwZGF0ZXMgPSB7XG4gIGF0b21pY1VwZGF0ZXJcbn07XG5cbnZhciBSZWNvaWxfQXRvbWljVXBkYXRlc18xID0gUmVjb2lsX0F0b21pY1VwZGF0ZXMuYXRvbWljVXBkYXRlcjtcblxudmFyIFJlY29pbF9BdG9taWNVcGRhdGVzJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgYXRvbWljVXBkYXRlcjogUmVjb2lsX0F0b21pY1VwZGF0ZXNfMVxufSk7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG5cbnZhciBpbnZhcmlhbnRfMSA9IGludmFyaWFudDtcblxuLy8gQG9zcy1vbmx5XG5cblxudmFyIFJlY29pbF9pbnZhcmlhbnQgPSBpbnZhcmlhbnRfMTtcblxuY29uc3Qge1xuICBhdG9taWNVcGRhdGVyOiBhdG9taWNVcGRhdGVyJDFcbn0gPSBSZWNvaWxfQXRvbWljVXBkYXRlcyQxO1xuXG5jb25zdCB7XG4gIGJhdGNoVXBkYXRlczogYmF0Y2hVcGRhdGVzJDRcbn0gPSBSZWNvaWxfQmF0Y2hpbmc7XG5cbmNvbnN0IHtcbiAgREVGQVVMVF9WQUxVRTogREVGQVVMVF9WQUxVRSQ1XG59ID0gUmVjb2lsX05vZGU7XG5cbmNvbnN0IHtcbiAgdXNlU3RvcmVSZWY6IHVzZVN0b3JlUmVmJDZcbn0gPSBSZWNvaWxfUmVjb2lsUm9vdDtcblxuY29uc3Qge1xuICByZWZyZXNoUmVjb2lsVmFsdWU6IHJlZnJlc2hSZWNvaWxWYWx1ZSQxLFxuICBzZXRSZWNvaWxWYWx1ZTogc2V0UmVjb2lsVmFsdWUkM1xufSA9IFJlY29pbF9SZWNvaWxWYWx1ZUludGVyZmFjZTtcblxuY29uc3Qge1xuICBTbmFwc2hvdDogU25hcHNob3QkMSxcbiAgY2xvbmVTbmFwc2hvdDogY2xvbmVTbmFwc2hvdCQyXG59ID0gUmVjb2lsX1NuYXBzaG90JDE7XG5cbmNvbnN0IHtcbiAgZ290b1NuYXBzaG90OiBnb3RvU25hcHNob3QkMVxufSA9IFJlY29pbF9TbmFwc2hvdEhvb2tzO1xuXG5jb25zdCB7XG4gIHVzZUNhbGxiYWNrOiB1c2VDYWxsYmFjayQzXG59ID0gcmVhY3Q7XG5cblxuXG5cblxuXG5cbmNsYXNzIFNlbnRpbmVsIHt9XG5cbmNvbnN0IFNFTlRJTkVMID0gbmV3IFNlbnRpbmVsKCk7XG5cbmZ1bmN0aW9uIHJlY29pbENhbGxiYWNrKHN0b3JlLCBmbiwgYXJncywgZXh0cmFJbnRlcmZhY2UpIHtcbiAgbGV0IHJldCA9IFNFTlRJTkVMO1xuICBiYXRjaFVwZGF0ZXMkNCgoKSA9PiB7XG4gICAgY29uc3QgZXJyTXNnID0gJ3VzZVJlY29pbENhbGxiYWNrKCkgZXhwZWN0cyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uOiAnICsgJ2l0IGFjY2VwdHMgYSBmdW5jdGlvbiBvZiB0aGUgdHlwZSAoUmVjb2lsSW50ZXJmYWNlKSA9PiAoQXJncykgPT4gUmV0dXJuVHlwZSAnICsgJ2FuZCByZXR1cm5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gKEFyZ3MpID0+IFJldHVyblR5cGUsIHdoZXJlIFJlY29pbEludGVyZmFjZSBpcyAnICsgJ2FuIG9iamVjdCB7c25hcHNob3QsIHNldCwgLi4ufSBhbmQgQXJncyBhbmQgUmV0dXJuVHlwZSBhcmUgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gJyArICd0eXBlcyBvZiB0aGUgY2FsbGJhY2sgeW91IHdhbnQgdG8gY3JlYXRlLiAgUGxlYXNlIHNlZSB0aGUgZG9jcyAnICsgJ2F0IHJlY29pbGpzLm9yZyBmb3IgZGV0YWlscy4nO1xuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgUmVjb2lsX2VycihlcnJNc2cpO1xuICAgIH0gLy8gQ2xvbmUgdGhlIHNuYXBzaG90IGxhemlseSB0byBhdm9pZCBvdmVyaGVhZCBpZiB0aGUgY2FsbGJhY2sgZG9lcyBub3QgdXNlIGl0LlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBzbmFwc2hvdCBtYXkgcmVwcmVzZW50IGxhdGVyIHN0YXRlIGZyb20gd2hlblxuICAgIC8vIHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkIGlmIGl0IGZpcnN0IGFjY2Vzc2VzIHRoZSBzbmFwc2hvdCBhc3luY2hyb25vdXNseS5cblxuXG4gICAgY29uc3QgY2FsbGJhY2tJbnRlcmZhY2UgPSBSZWNvaWxfbGF6eVByb3h5KHsgLi4uKGV4dHJhSW50ZXJmYWNlICE9PSBudWxsICYmIGV4dHJhSW50ZXJmYWNlICE9PSB2b2lkIDAgPyBleHRyYUludGVyZmFjZSA6IHt9KSxcbiAgICAgIC8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuICAgICAgc2V0OiAobm9kZSwgbmV3VmFsdWUpID0+IHNldFJlY29pbFZhbHVlJDMoc3RvcmUsIG5vZGUsIG5ld1ZhbHVlKSxcbiAgICAgIHJlc2V0OiBub2RlID0+IHNldFJlY29pbFZhbHVlJDMoc3RvcmUsIG5vZGUsIERFRkFVTFRfVkFMVUUkNSksXG4gICAgICByZWZyZXNoOiBub2RlID0+IHJlZnJlc2hSZWNvaWxWYWx1ZSQxKHN0b3JlLCBub2RlKSxcbiAgICAgIGdvdG9TbmFwc2hvdDogc25hcHNob3QgPT4gZ290b1NuYXBzaG90JDEoc3RvcmUsIHNuYXBzaG90KSxcbiAgICAgIHRyYW5zYWN0X1VOU1RBQkxFOiB0cmFuc2FjdGlvbiA9PiBhdG9taWNVcGRhdGVyJDEoc3RvcmUpKHRyYW5zYWN0aW9uKVxuICAgIH0sIHtcbiAgICAgIHNuYXBzaG90OiAoKSA9PiBjbG9uZVNuYXBzaG90JDIoc3RvcmUpXG4gICAgfSk7XG4gICAgY29uc3QgY2FsbGJhY2sgPSBmbihjYWxsYmFja0ludGVyZmFjZSk7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBSZWNvaWxfZXJyKGVyck1zZyk7XG4gICAgfVxuXG4gICAgcmV0ID0gY2FsbGJhY2soLi4uYXJncyk7XG4gIH0pO1xuICAhIShyZXQgaW5zdGFuY2VvZiBTZW50aW5lbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSZWNvaWxfaW52YXJpYW50KGZhbHNlLCAnYmF0Y2hVcGRhdGVzIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHknKSA6IFJlY29pbF9pbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiB1c2VSZWNvaWxDYWxsYmFjayhmbiwgZGVwcykge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDYoKTtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrJDMoIC8vICRGbG93SXNzdWVbaW5jb21wYXRpYmxlLWNhbGxdXG4gICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIHJlY29pbENhbGxiYWNrKHN0b3JlUmVmLmN1cnJlbnQsIGZuLCBhcmdzKTtcbiAgfSwgZGVwcyAhPSBudWxsID8gWy4uLmRlcHMsIHN0b3JlUmVmXSA6IHVuZGVmaW5lZCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZiLXd3dy9yZWFjdC1ob29rcy1kZXBzXG4gICk7XG59XG5cbnZhciBSZWNvaWxfdXNlUmVjb2lsQ2FsbGJhY2sgPSB7XG4gIHJlY29pbENhbGxiYWNrLFxuICB1c2VSZWNvaWxDYWxsYmFja1xufTtcblxuY29uc3Qge1xuICB1c2VTdG9yZVJlZjogdXNlU3RvcmVSZWYkN1xufSA9IFJlY29pbF9SZWNvaWxSb290O1xuXG5jb25zdCB7XG4gIHJlZnJlc2hSZWNvaWxWYWx1ZTogcmVmcmVzaFJlY29pbFZhbHVlJDJcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2U7XG5cbmNvbnN0IHtcbiAgdXNlQ2FsbGJhY2s6IHVzZUNhbGxiYWNrJDRcbn0gPSByZWFjdDtcblxuZnVuY3Rpb24gdXNlUmVjb2lsUmVmcmVzaGVyKHJlY29pbFZhbHVlKSB7XG4gIGNvbnN0IHN0b3JlUmVmID0gdXNlU3RvcmVSZWYkNygpO1xuICByZXR1cm4gdXNlQ2FsbGJhY2skNCgoKSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIHJlZnJlc2hSZWNvaWxWYWx1ZSQyKHN0b3JlLCByZWNvaWxWYWx1ZSk7XG4gIH0sIFtyZWNvaWxWYWx1ZSwgc3RvcmVSZWZdKTtcbn1cblxudmFyIFJlY29pbF91c2VSZWNvaWxSZWZyZXNoZXIgPSB1c2VSZWNvaWxSZWZyZXNoZXI7XG5cbmNvbnN0IHtcbiAgYXRvbWljVXBkYXRlcjogYXRvbWljVXBkYXRlciQyXG59ID0gUmVjb2lsX0F0b21pY1VwZGF0ZXMkMTtcblxuY29uc3Qge1xuICB1c2VTdG9yZVJlZjogdXNlU3RvcmVSZWYkOFxufSA9IFJlY29pbF9SZWNvaWxSb290O1xuXG5jb25zdCB7XG4gIHVzZU1lbW86IHVzZU1lbW8kM1xufSA9IHJlYWN0O1xuXG5mdW5jdGlvbiB1c2VSZWNvaWxUcmFuc2FjdGlvbihmbiwgZGVwcykge1xuICBjb25zdCBzdG9yZVJlZiA9IHVzZVN0b3JlUmVmJDgoKTtcbiAgcmV0dXJuIHVzZU1lbW8kMygoKSA9PiAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IGF0b21pY1VwZGF0ZSA9IGF0b21pY1VwZGF0ZXIkMihzdG9yZVJlZi5jdXJyZW50KTtcbiAgICBhdG9taWNVcGRhdGUodHJhbnNhY3Rpb25JbnRlcmZhY2UgPT4ge1xuICAgICAgZm4odHJhbnNhY3Rpb25JbnRlcmZhY2UpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICB9LCBkZXBzICE9IG51bGwgPyBbLi4uZGVwcywgc3RvcmVSZWZdIDogdW5kZWZpbmVkIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZmItd3d3L3JlYWN0LWhvb2tzLWRlcHNcbiAgKTtcbn1cblxudmFyIFJlY29pbF91c2VSZWNvaWxUcmFuc2FjdGlvbiA9IHVzZVJlY29pbFRyYW5zYWN0aW9uO1xuXG5jbGFzcyBUcmVlQ2FjaGUge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdmFyIF9vcHRpb25zJG9uSGl0LCBfb3B0aW9ucyRvblNldCwgX29wdGlvbnMkbWFwTm9kZVZhbHVlO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX251bUxlYWZzXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfcm9vdFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX29uSGl0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfb25TZXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9tYXBOb2RlVmFsdWVcIiwgdm9pZCAwKTtcblxuICAgIHRoaXMuX251bUxlYWZzID0gMDtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB0aGlzLl9vbkhpdCA9IChfb3B0aW9ucyRvbkhpdCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vbkhpdCkgIT09IG51bGwgJiYgX29wdGlvbnMkb25IaXQgIT09IHZvaWQgMCA/IF9vcHRpb25zJG9uSGl0IDogKCkgPT4ge307XG4gICAgdGhpcy5fb25TZXQgPSAoX29wdGlvbnMkb25TZXQgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub25TZXQpICE9PSBudWxsICYmIF9vcHRpb25zJG9uU2V0ICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRvblNldCA6ICgpID0+IHt9O1xuICAgIHRoaXMuX21hcE5vZGVWYWx1ZSA9IChfb3B0aW9ucyRtYXBOb2RlVmFsdWUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWFwTm9kZVZhbHVlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRtYXBOb2RlVmFsdWUgIT09IHZvaWQgMCA/IF9vcHRpb25zJG1hcE5vZGVWYWx1ZSA6IHZhbCA9PiB2YWw7XG4gIH1cblxuICBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9udW1MZWFmcztcbiAgfSAvLyBUT0RPOiBub2RlQ291bnQoKTogbnVtYmVyXG5cblxuICByb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgZ2V0KGdldE5vZGVWYWx1ZSwgaGFuZGxlcnMpIHtcbiAgICB2YXIgX3RoaXMkZ2V0TGVhZk5vZGU7XG5cbiAgICByZXR1cm4gKF90aGlzJGdldExlYWZOb2RlID0gdGhpcy5nZXRMZWFmTm9kZShnZXROb2RlVmFsdWUsIGhhbmRsZXJzKSkgPT09IG51bGwgfHwgX3RoaXMkZ2V0TGVhZk5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGdldExlYWZOb2RlLnZhbHVlO1xuICB9XG5cbiAgZ2V0TGVhZk5vZGUoZ2V0Tm9kZVZhbHVlLCBoYW5kbGVycykge1xuICAgIHJldHVybiBmaW5kTGVhZih0aGlzLnJvb3QoKSwgbm9kZUtleSA9PiB0aGlzLl9tYXBOb2RlVmFsdWUoZ2V0Tm9kZVZhbHVlKG5vZGVLZXkpKSwge1xuICAgICAgb25Ob2RlVmlzaXQ6IG5vZGUgPT4ge1xuICAgICAgICBoYW5kbGVycyA9PT0gbnVsbCB8fCBoYW5kbGVycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGFuZGxlcnMub25Ob2RlVmlzaXQobm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ2xlYWYnKSB7XG4gICAgICAgICAgdGhpcy5fb25IaXQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldChyb3V0ZSwgdmFsdWUsIGhhbmRsZXJzKSB7XG4gICAgbGV0IGxlYWZOb2RlO1xuICAgIGxldCBuZXdSb290ID0gbnVsbDtcblxuICAgIGNvbnN0IHNldFJldHJ5YWJsZVBhcnQgPSAoKSA9PiB7XG4gICAgICBuZXdSb290ID0gYWRkTGVhZih0aGlzLnJvb3QoKSwgcm91dGUubWFwKChbbm9kZUtleSwgbm9kZVZhbHVlXSkgPT4gW25vZGVLZXksIHRoaXMuX21hcE5vZGVWYWx1ZShub2RlVmFsdWUpXSksIG51bGwsIHZhbHVlLCBudWxsLCB7XG4gICAgICAgIG9uTm9kZVZpc2l0OiBub2RlID0+IHtcbiAgICAgICAgICBoYW5kbGVycyA9PT0gbnVsbCB8fCBoYW5kbGVycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGFuZGxlcnMub25Ob2RlVmlzaXQobm9kZSk7XG5cbiAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAnbGVhZicpIHtcbiAgICAgICAgICAgIGxlYWZOb2RlID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBzZXRSZXRyeWFibGVQYXJ0KCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2V0UmV0cnlhYmxlUGFydCgpO1xuXG4gICAgaWYgKCF0aGlzLnJvb3QoKSkge1xuICAgICAgdGhpcy5fcm9vdCA9IG5ld1Jvb3Q7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtTGVhZnMrKztcblxuICAgIHRoaXMuX29uU2V0KFJlY29pbF9udWxsdGhyb3dzKGxlYWZOb2RlKSk7XG4gIH1cblxuICBkZWxldGUobm9kZSkge1xuICAgIGlmICghdGhpcy5yb290KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gUmVjb2lsX251bGx0aHJvd3ModGhpcy5yb290KCkpO1xuICAgIGNvbnN0IGV4aXN0c0luVHJlZSA9IHBydW5lTm9kZUZyb21UcmVlKHJvb3QsIG5vZGUsIG5vZGUucGFyZW50KTtcblxuICAgIGlmICghZXhpc3RzSW5UcmVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QgfHwgcm9vdC50eXBlID09PSAnYnJhbmNoJyAmJiAhcm9vdC5icmFuY2hlcy5zaXplKSB7XG4gICAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICAgIHRoaXMuX251bUxlYWZzID0gMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX251bUxlYWZzIC09IGNvdW50RG93bnN0cmVhbUxlYXZlcyhub2RlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX251bUxlYWZzID0gMDtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNvbnN0IGZpbmRMZWFmID0gKHJvb3QsIGdldE5vZGVWYWx1ZSwgaGFuZGxlcnMpID0+IHtcbiAgdmFyIF9oYW5kbGVycyRvbk5vZGVWaXNpdDtcblxuICBpZiAocm9vdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhhbmRsZXJzID09PSBudWxsIHx8IGhhbmRsZXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2hhbmRsZXJzJG9uTm9kZVZpc2l0ID0gaGFuZGxlcnMub25Ob2RlVmlzaXQpID09PSBudWxsIHx8IF9oYW5kbGVycyRvbk5vZGVWaXNpdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2hhbmRsZXJzJG9uTm9kZVZpc2l0LmNhbGwoaGFuZGxlcnMsIHJvb3QpO1xuXG4gIGlmIChyb290LnR5cGUgPT09ICdsZWFmJykge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgY29uc3Qgbm9kZVZhbHVlID0gZ2V0Tm9kZVZhbHVlKHJvb3Qubm9kZUtleSk7XG4gIHJldHVybiBmaW5kTGVhZihyb290LmJyYW5jaGVzLmdldChub2RlVmFsdWUpLCBnZXROb2RlVmFsdWUsIGhhbmRsZXJzKTtcbn07XG5cbmNvbnN0IGFkZExlYWYgPSAocm9vdCwgcm91dGUsIHBhcmVudCwgdmFsdWUsIGJyYW5jaEtleSwgaGFuZGxlcnMsIG9uQWJvcnQpID0+IHtcbiAgdmFyIF9oYW5kbGVycyRvbk5vZGVWaXNpdDI7XG5cbiAgbGV0IG5vZGU7XG5cbiAgaWYgKHJvb3QgPT0gbnVsbCkge1xuICAgIGlmIChyb3V0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdsZWFmJyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgYnJhbmNoS2V5XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBbcGF0aCwgLi4ucmVzdF0gPSByb3V0ZTtcbiAgICAgIGNvbnN0IFtub2RlS2V5LCBub2RlVmFsdWVdID0gcGF0aDtcbiAgICAgIG5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdicmFuY2gnLFxuICAgICAgICBub2RlS2V5LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGJyYW5jaGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGJyYW5jaEtleVxuICAgICAgfTtcbiAgICAgIG5vZGUuYnJhbmNoZXMuc2V0KG5vZGVWYWx1ZSwgYWRkTGVhZihudWxsLCByZXN0LCBub2RlLCB2YWx1ZSwgbm9kZVZhbHVlLCBoYW5kbGVycywgb25BYm9ydCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlID0gcm9vdDtcblxuICAgIGlmIChyb3V0ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IFtwYXRoLCAuLi5yZXN0XSA9IHJvdXRlO1xuICAgICAgY29uc3QgW25vZGVLZXksIG5vZGVWYWx1ZV0gPSBwYXRoO1xuXG4gICAgICBpZiAocm9vdC50eXBlICE9PSAnYnJhbmNoJyB8fCByb290Lm5vZGVLZXkgIT09IG5vZGVLZXkpIHtcbiAgICAgICAgUmVjb2lsX3JlY292ZXJhYmxlVmlvbGF0aW9uKCdFeGlzdGluZyBjYWNoZSBtdXN0IGhhdmUgYSBicmFuY2ggbWlkd2F5IHRocm91Z2ggdGhlICcgKyAncm91dGUgd2l0aCBtYXRjaGluZyBub2RlIGtleS4gUmVzZXR0aW5nIGNhY2hlLicpO1xuICAgICAgICBvbkFib3J0KCk7XG4gICAgICAgIHJldHVybiBub2RlOyAvLyBpZ25vcmVkXG4gICAgICB9XG5cbiAgICAgIHJvb3QuYnJhbmNoZXMuc2V0KG5vZGVWYWx1ZSwgYWRkTGVhZihyb290LmJyYW5jaGVzLmdldChub2RlVmFsdWUpLCByZXN0LCByb290LCB2YWx1ZSwgbm9kZVZhbHVlLCBoYW5kbGVycywgb25BYm9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXJzID09PSBudWxsIHx8IGhhbmRsZXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2hhbmRsZXJzJG9uTm9kZVZpc2l0MiA9IGhhbmRsZXJzLm9uTm9kZVZpc2l0KSA9PT0gbnVsbCB8fCBfaGFuZGxlcnMkb25Ob2RlVmlzaXQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaGFuZGxlcnMkb25Ob2RlVmlzaXQyLmNhbGwoaGFuZGxlcnMsIG5vZGUpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmNvbnN0IHBydW5lTm9kZUZyb21UcmVlID0gKHJvb3QsIG5vZGUsIHBhcmVudCkgPT4ge1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiByb290ID09PSBub2RlO1xuICB9XG5cbiAgcGFyZW50LmJyYW5jaGVzLmRlbGV0ZShub2RlLmJyYW5jaEtleSk7XG4gIHJldHVybiBwcnVuZVVwc3RyZWFtQnJhbmNoZXMocm9vdCwgcGFyZW50LCBwYXJlbnQucGFyZW50KTtcbn07XG5cbmNvbnN0IHBydW5lVXBzdHJlYW1CcmFuY2hlcyA9IChyb290LCBicmFuY2hOb2RlLCBwYXJlbnQpID0+IHtcbiAgaWYgKCFwYXJlbnQpIHtcbiAgICByZXR1cm4gcm9vdCA9PT0gYnJhbmNoTm9kZTtcbiAgfVxuXG4gIGlmIChicmFuY2hOb2RlLmJyYW5jaGVzLnNpemUgPT09IDApIHtcbiAgICBwYXJlbnQuYnJhbmNoZXMuZGVsZXRlKGJyYW5jaE5vZGUuYnJhbmNoS2V5KTtcbiAgfVxuXG4gIHJldHVybiBwcnVuZVVwc3RyZWFtQnJhbmNoZXMocm9vdCwgcGFyZW50LCBwYXJlbnQucGFyZW50KTtcbn07XG5cbmNvbnN0IGNvdW50RG93bnN0cmVhbUxlYXZlcyA9IG5vZGUgPT4gbm9kZS50eXBlID09PSAnbGVhZicgPyAxIDogQXJyYXkuZnJvbShub2RlLmJyYW5jaGVzLnZhbHVlcygpKS5yZWR1Y2UoKHN1bSwgY3Vyck5vZGUpID0+IHN1bSArIGNvdW50RG93bnN0cmVhbUxlYXZlcyhjdXJyTm9kZSksIDApO1xuXG52YXIgUmVjb2lsX1RyZWVDYWNoZSA9IHtcbiAgVHJlZUNhY2hlXG59O1xuXG52YXIgUmVjb2lsX1RyZWVDYWNoZV8xID0gUmVjb2lsX1RyZWVDYWNoZS5UcmVlQ2FjaGU7XG5cbnZhciBSZWNvaWxfVHJlZUNhY2hlJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgVHJlZUNhY2hlOiBSZWNvaWxfVHJlZUNhY2hlXzFcbn0pO1xuXG5jbGFzcyBMUlVDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB2YXIgX29wdGlvbnMkbWFwS2V5O1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX21heFNpemVcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9zaXplXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfaGVhZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX3RhaWxcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9tYXBcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9rZXlNYXBwZXJcIiwgdm9pZCAwKTtcblxuICAgIHRoaXMuX21heFNpemUgPSBvcHRpb25zLm1heFNpemU7XG4gICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgdGhpcy5faGVhZCA9IG51bGw7XG4gICAgdGhpcy5fdGFpbCA9IG51bGw7XG4gICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2tleU1hcHBlciA9IChfb3B0aW9ucyRtYXBLZXkgPSBvcHRpb25zLm1hcEtleSkgIT09IG51bGwgJiYgX29wdGlvbnMkbWFwS2V5ICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRtYXBLZXkgOiB2ID0+IHY7XG4gIH1cblxuICBoZWFkKCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkO1xuICB9XG5cbiAgdGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFpbDtcbiAgfVxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBtYXhTaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhTaXplO1xuICB9XG5cbiAgaGFzKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHRoaXMuX2tleU1hcHBlcihrZXkpKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBjb25zdCBtYXBwZWRLZXkgPSB0aGlzLl9rZXlNYXBwZXIoa2V5KTtcblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9tYXAuZ2V0KG1hcHBlZEtleSk7XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5zZXQoa2V5LCBub2RlLnZhbHVlKTtcbiAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHNldChrZXksIHZhbCkge1xuICAgIGNvbnN0IG1hcHBlZEtleSA9IHRoaXMuX2tleU1hcHBlcihrZXkpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdOb2RlID0gdGhpcy5fbWFwLmdldChtYXBwZWRLZXkpO1xuXG4gICAgaWYgKGV4aXN0aW5nTm9kZSkge1xuICAgICAgdGhpcy5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkID0gdGhpcy5oZWFkKCk7XG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgIGtleSxcbiAgICAgIHJpZ2h0OiBoZWFkLFxuICAgICAgbGVmdDogbnVsbCxcbiAgICAgIHZhbHVlOiB2YWxcbiAgICB9O1xuXG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQubGVmdCA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RhaWwgPSBub2RlO1xuICAgIH1cblxuICAgIHRoaXMuX21hcC5zZXQobWFwcGVkS2V5LCBub2RlKTtcblxuICAgIHRoaXMuX2hlYWQgPSBub2RlO1xuICAgIHRoaXMuX3NpemUrKztcblxuICAgIHRoaXMuX21heWJlRGVsZXRlTFJVKCk7XG4gIH1cblxuICBfbWF5YmVEZWxldGVMUlUoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSgpID4gdGhpcy5tYXhTaXplKCkpIHtcbiAgICAgIHRoaXMuZGVsZXRlTHJ1KCk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlTHJ1KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWwoKTtcblxuICAgIGlmICh0YWlsKSB7XG4gICAgICB0aGlzLmRlbGV0ZSh0YWlsLmtleSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlKGtleSkge1xuICAgIGNvbnN0IG1hcHBlZEtleSA9IHRoaXMuX2tleU1hcHBlcihrZXkpO1xuXG4gICAgaWYgKCF0aGlzLl9zaXplIHx8ICF0aGlzLl9tYXAuaGFzKG1hcHBlZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gUmVjb2lsX251bGx0aHJvd3ModGhpcy5fbWFwLmdldChtYXBwZWRLZXkpKTtcbiAgICBjb25zdCByaWdodCA9IG5vZGUucmlnaHQ7XG4gICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcblxuICAgIGlmIChyaWdodCkge1xuICAgICAgcmlnaHQubGVmdCA9IG5vZGUubGVmdDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdC5yaWdodCA9IG5vZGUucmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHRoaXMuaGVhZCgpKSB7XG4gICAgICB0aGlzLl9oZWFkID0gcmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHRoaXMudGFpbCgpKSB7XG4gICAgICB0aGlzLl90YWlsID0gbGVmdDtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXAuZGVsZXRlKG1hcHBlZEtleSk7XG5cbiAgICB0aGlzLl9zaXplLS07XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgICB0aGlzLl9oZWFkID0gbnVsbDtcbiAgICB0aGlzLl90YWlsID0gbnVsbDtcbiAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxufVxuXG52YXIgUmVjb2lsX0xSVUNhY2hlID0ge1xuICBMUlVDYWNoZVxufTtcblxudmFyIFJlY29pbF9MUlVDYWNoZV8xID0gUmVjb2lsX0xSVUNhY2hlLkxSVUNhY2hlO1xuXG52YXIgUmVjb2lsX0xSVUNhY2hlJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgTFJVQ2FjaGU6IFJlY29pbF9MUlVDYWNoZV8xXG59KTtcblxuY29uc3Qge1xuICBMUlVDYWNoZTogTFJVQ2FjaGUkMVxufSA9IFJlY29pbF9MUlVDYWNoZSQxO1xuXG5jb25zdCB7XG4gIFRyZWVDYWNoZTogVHJlZUNhY2hlJDFcbn0gPSBSZWNvaWxfVHJlZUNhY2hlJDE7XG5cbmZ1bmN0aW9uIHRyZWVDYWNoZUxSVShtYXhTaXplLCBtYXBOb2RlVmFsdWUgPSB2ID0+IHYpIHtcbiAgY29uc3QgbHJ1Q2FjaGUgPSBuZXcgTFJVQ2FjaGUkMSh7XG4gICAgbWF4U2l6ZVxuICB9KTtcbiAgY29uc3QgY2FjaGUgPSBuZXcgVHJlZUNhY2hlJDEoe1xuICAgIG1hcE5vZGVWYWx1ZSxcbiAgICBvbkhpdDogbm9kZSA9PiB7XG4gICAgICBscnVDYWNoZS5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBvblNldDogbm9kZSA9PiB7XG4gICAgICBjb25zdCBscnVOb2RlID0gbHJ1Q2FjaGUudGFpbCgpO1xuICAgICAgbHJ1Q2FjaGUuc2V0KG5vZGUsIHRydWUpO1xuXG4gICAgICBpZiAobHJ1Tm9kZSAmJiBjYWNoZS5zaXplKCkgPiBtYXhTaXplKSB7XG4gICAgICAgIGNhY2hlLmRlbGV0ZShscnVOb2RlLmtleSk7XG4gICAgICB9XG4gICAgfVxuICB9KTsgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG4gIHJldHVybiBjYWNoZTtcbn1cblxudmFyIFJlY29pbF90cmVlQ2FjaGVMUlUgPSB0cmVlQ2FjaGVMUlU7XG5cbmNvbnN0IFRJTUVfV0FSTklOR19USFJFU0hPTERfTVMgPSAxNTtcblxuZnVuY3Rpb24gc3RyaW5naWZ5KHgsIG9wdCwga2V5KSB7XG4gIC8vIEEgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHRoZSBtb3JlIGV4cGVuc2l2ZSBKU09OLnN0cmluZ2lmeSgpIGZvciBzaW1wbGUgc3RyaW5nc1xuICAvLyBUaGlzIG1heSBsb3NlIHByb3RlY3Rpb24gZm9yIHUyMDI4IGFuZCB1MjAyOSwgdGhvdWdoLlxuICBpZiAodHlwZW9mIHggPT09ICdzdHJpbmcnICYmICF4LmluY2x1ZGVzKCdcIicpICYmICF4LmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICByZXR1cm4gYFwiJHt4fVwiYDtcbiAgfSAvLyBIYW5kbGUgcHJpbWl0aXZlIHR5cGVzXG5cblxuICBzd2l0Y2ggKHR5cGVvZiB4KSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiAnJztcbiAgICAvLyBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLCBidXQgd2UgYWx3YXlzIHdhbnQgdG8gcmV0dXJuIGEgc3RyaW5nXG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB4ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIC8vIGNhc2UgJ2JpZ2ludCc6IC8vIEJpZ0ludCBpcyBub3Qgc3VwcG9ydGVkIGluIHd3d1xuICAgICAgcmV0dXJuIFN0cmluZyh4KTtcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAvLyBBZGQgc3Vycm91bmRpbmcgcXVvdGVzIGFuZCBlc2NhcGUgaW50ZXJuYWwgcXVvdGVzXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeCk7XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBpZiAoKG9wdCA9PT0gbnVsbCB8fCBvcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdC5hbGxvd0Z1bmN0aW9ucykgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2VycignQXR0ZW1wdCB0byBzZXJpYWxpemUgZnVuY3Rpb24gaW4gYSBSZWNvaWwgY2FjaGUga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgX19GVU5DVElPTigke3gubmFtZX0pX19gO1xuICB9XG5cbiAgaWYgKHggPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9IC8vIEZhbGxiYWNrIGNhc2UgZm9yIHVua25vd24gdHlwZXNcblxuXG4gIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICB2YXIgX0pTT04kc3RyaW5naWZ5O1xuXG4gICAgcmV0dXJuIChfSlNPTiRzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeSh4KSkgIT09IG51bGwgJiYgX0pTT04kc3RyaW5naWZ5ICE9PSB2b2lkIDAgPyBfSlNPTiRzdHJpbmdpZnkgOiAnJztcbiAgfSAvLyBEZWFsIHdpdGggYWxsIHByb21pc2VzIGFzIGVxdWl2YWxlbnQgZm9yIG5vdy5cblxuXG4gIGlmIChSZWNvaWxfaXNQcm9taXNlKHgpKSB7XG4gICAgcmV0dXJuICdfX1BST01JU0VfXyc7XG4gIH0gLy8gQXJyYXlzIGhhbmRsZSByZWN1cnNpdmUgc3RyaW5naWZpY2F0aW9uXG5cblxuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiBgWyR7eC5tYXAoKHYsIGkpID0+IHN0cmluZ2lmeSh2LCBvcHQsIGkudG9TdHJpbmcoKSkpfV1gO1xuICB9IC8vIElmIGFuIG9iamVjdCBkZWZpbmVzIGEgdG9KU09OKCkgbWV0aG9kLCB0aGVuIHVzZSB0aGF0IHRvIG92ZXJyaWRlIHRoZVxuICAvLyBzZXJpYWxpemF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBKU09OLnN0cmluZ2lmeSgpLlxuICAvLyBQYXNzIHRoZSBrZXkgZm9yIGNvbXBhdGliaWxpdHkuXG4gIC8vIEltbXV0YWJsZS5qcyBjb2xsZWN0aW9ucyBkZWZpbmUgdGhpcyBtZXRob2QgdG8gYWxsb3cgdXMgdG8gc2VyaWFsaXplIHRoZW0uXG5cblxuICBpZiAodHlwZW9mIHgudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG4gICAgcmV0dXJuIHN0cmluZ2lmeSh4LnRvSlNPTihrZXkpLCBvcHQsIGtleSk7XG4gIH0gLy8gRm9yIGJ1aWx0LWluIE1hcHMsIHNvcnQgdGhlIGtleXMgaW4gYSBzdGFibGUgb3JkZXIgaW5zdGVhZCBvZiB0aGVcbiAgLy8gZGVmYXVsdCBpbnNlcnRpb24gb3JkZXIuICBTdXBwb3J0IG5vbi1zdHJpbmcga2V5cy5cblxuXG4gIGlmICh4IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB4KSB7XG4gICAgICAvLyBTdHJpbmdpZnkgd2lsbCBlc2NhcGUgYW55IG5lc3RlZCBxdW90ZXNcbiAgICAgIG9ialt0eXBlb2YgayA9PT0gJ3N0cmluZycgPyBrIDogc3RyaW5naWZ5KGssIG9wdCldID0gdjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5naWZ5KG9iaiwgb3B0LCBrZXkpO1xuICB9IC8vIEZvciBidWlsdC1pbiBTZXRzLCBzb3J0IHRoZSBrZXlzIGluIGEgc3RhYmxlIG9yZGVyIGluc3RlYWQgb2YgdGhlXG4gIC8vIGRlZmF1bHQgaW5zZXJ0aW9uIG9yZGVyLlxuXG5cbiAgaWYgKHggaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5KEFycmF5LmZyb20oeCkuc29ydCgoYSwgYikgPT4gc3RyaW5naWZ5KGEsIG9wdCkubG9jYWxlQ29tcGFyZShzdHJpbmdpZnkoYiwgb3B0KSkpLCBvcHQsIGtleSk7XG4gIH0gLy8gQW55dGhpbmcgZWxzZSB0aGF0IGlzIGl0ZXJhYmxlIHNlcmlhbGl6ZSBhcyBhbiBBcnJheS5cblxuXG4gIGlmIChTeW1ib2wgIT09IHVuZGVmaW5lZCAmJiB4W1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCAmJiB0eXBlb2YgeFtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG4gICAgcmV0dXJuIHN0cmluZ2lmeShBcnJheS5mcm9tKHgpLCBvcHQsIGtleSk7XG4gIH0gLy8gRm9yIGFsbCBvdGhlciBPYmplY3RzLCBzb3J0IHRoZSBrZXlzIGluIGEgc3RhYmxlIG9yZGVyLlxuXG5cbiAgcmV0dXJuIGB7JHtPYmplY3Qua2V5cyh4KS5maWx0ZXIoayA9PiB4W2tdICE9PSB1bmRlZmluZWQpLnNvcnQoKSAvLyBzdHJpbmdpZnkgdGhlIGtleSB0byBhZGQgcXVvdGVzIGFuZCBlc2NhcGUgYW55IG5lc3RlZCBzbGFzaGVzIG9yIHF1b3Rlcy5cbiAgLm1hcChrID0+IGAke3N0cmluZ2lmeShrLCBvcHQpfToke3N0cmluZ2lmeSh4W2tdLCBvcHQsIGspfWApLmpvaW4oJywnKX19YDtcbn0gLy8gVXRpbGl0eSBzaW1pbGFyIHRvIEpTT04uc3RyaW5naWZ5KCkgZXhjZXB0OlxuLy8gKiBTZXJpYWxpemUgYnVpbHQtaW4gU2V0cyBhcyBhbiBBcnJheVxuLy8gKiBTZXJpYWxpemUgYnVpbHQtaW4gTWFwcyBhcyBhbiBPYmplY3QuICBTdXBwb3J0cyBub24tc3RyaW5nIGtleXMuXG4vLyAqIFNlcmlhbGl6ZSBvdGhlciBpdGVyYWJsZXMgYXMgYXJyYXlzXG4vLyAqIFNvcnQgdGhlIGtleXMgb2YgT2JqZWN0cyBhbmQgTWFwcyB0byBoYXZlIGEgc3RhYmxlIG9yZGVyIGJhc2VkIG9uIHN0cmluZyBjb252ZXJzaW9uLlxuLy8gICAgVGhpcyBvdmVycmlkZXMgdGhlaXIgZGVmYXVsdCBpbnNlcnRpb24gb3JkZXIuXG4vLyAqIFN0aWxsIHVzZXMgdG9KU09OKCkgb2YgYW55IG9iamVjdCB0byBvdmVycmlkZSBzZXJpYWxpemF0aW9uXG4vLyAqIFN1cHBvcnQgU3ltYm9scyAodGhvdWdoIGRvbid0IGd1YXJhbnRlZSB1bmlxdWVuZXNzKVxuLy8gKiBXZSBjb3VsZCBzdXBwb3J0IEJpZ0ludCwgYnV0IEZsb3cgZG9lc24ndCBzZWVtIHRvIGxpa2UgaXQuXG4vLyBTZWUgUmVjb2lsX3N0YWJsZVN0cmluZ2lmeS10ZXN0LmpzIGZvciBleGFtcGxlc1xuXG5cbmZ1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeSh4LCBvcHQgPSB7XG4gIGFsbG93RnVuY3Rpb25zOiBmYWxzZVxufSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSB3aW5kb3cucGVyZm9ybWFuY2UgPyB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgOiAwO1xuICAgICAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KHgsIG9wdCk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gd2luZG93LnBlcmZvcm1hbmNlID8gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpIDogMDtcblxuICAgICAgaWYgKGVuZFRpbWUgLSBzdGFydFRpbWUgPiBUSU1FX1dBUk5JTkdfVEhSRVNIT0xEX01TKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIGZiLXd3dy9uby1jb25zb2xlICovXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYFJlY29pbDogU3BlbnQgJHtlbmRUaW1lIC0gc3RhcnRUaW1lfW1zIGNvbXB1dGluZyBhIGNhY2hlIGtleWApO1xuICAgICAgICBjb25zb2xlLndhcm4oeCwgc3RyKTtcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIGZiLXd3dy9uby1jb25zb2xlICovXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ2lmeSh4LCBvcHQpO1xufVxuXG52YXIgUmVjb2lsX3N0YWJsZVN0cmluZ2lmeSA9IHN0YWJsZVN0cmluZ2lmeTtcblxuY29uc3Qge1xuICBUcmVlQ2FjaGU6IFRyZWVDYWNoZSQyXG59ID0gUmVjb2lsX1RyZWVDYWNoZSQxO1xuXG5cblxuXG5cblxuXG5cblxuY29uc3QgZGVmYXVsdFBvbGljeSA9IHtcbiAgZXF1YWxpdHk6ICdyZWZlcmVuY2UnLFxuICBldmljdGlvbjogJ2tlZXAtYWxsJyxcbiAgbWF4U2l6ZTogSW5maW5pdHlcbn07XG5cbmZ1bmN0aW9uIHRyZWVDYWNoZUZyb21Qb2xpY3koe1xuICBlcXVhbGl0eSA9IGRlZmF1bHRQb2xpY3kuZXF1YWxpdHksXG4gIGV2aWN0aW9uID0gZGVmYXVsdFBvbGljeS5ldmljdGlvbixcbiAgbWF4U2l6ZSA9IGRlZmF1bHRQb2xpY3kubWF4U2l6ZVxufSA9IGRlZmF1bHRQb2xpY3kpIHtcbiAgY29uc3QgdmFsdWVNYXBwZXIgPSBnZXRWYWx1ZU1hcHBlcihlcXVhbGl0eSk7XG4gIGNvbnN0IHRyZWVDYWNoZSA9IGdldFRyZWVDYWNoZShldmljdGlvbiwgbWF4U2l6ZSwgdmFsdWVNYXBwZXIpO1xuICByZXR1cm4gdHJlZUNhY2hlO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZU1hcHBlcihlcXVhbGl0eSkge1xuICBzd2l0Y2ggKGVxdWFsaXR5KSB7XG4gICAgY2FzZSAncmVmZXJlbmNlJzpcbiAgICAgIHJldHVybiB2YWwgPT4gdmFsO1xuXG4gICAgY2FzZSAndmFsdWUnOlxuICAgICAgcmV0dXJuIHZhbCA9PiBSZWNvaWxfc3RhYmxlU3RyaW5naWZ5KHZhbCk7XG4gIH1cblxuICB0aHJvdyBSZWNvaWxfZXJyKGBVbnJlY29nbml6ZWQgZXF1YWxpdHkgcG9saWN5ICR7ZXF1YWxpdHl9YCk7XG59XG5cbmZ1bmN0aW9uIGdldFRyZWVDYWNoZShldmljdGlvbiwgbWF4U2l6ZSwgbWFwTm9kZVZhbHVlKSB7XG4gIHN3aXRjaCAoZXZpY3Rpb24pIHtcbiAgICBjYXNlICdrZWVwLWFsbCc6XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICByZXR1cm4gbmV3IFRyZWVDYWNoZSQyKHtcbiAgICAgICAgbWFwTm9kZVZhbHVlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2xydSc6XG4gICAgICByZXR1cm4gUmVjb2lsX3RyZWVDYWNoZUxSVShSZWNvaWxfbnVsbHRocm93cyhtYXhTaXplKSwgbWFwTm9kZVZhbHVlKTtcblxuICAgIGNhc2UgJ21vc3QtcmVjZW50JzpcbiAgICAgIHJldHVybiBSZWNvaWxfdHJlZUNhY2hlTFJVKDEsIG1hcE5vZGVWYWx1ZSk7XG4gIH1cblxuICB0aHJvdyBSZWNvaWxfZXJyKGBVbnJlY29nbml6ZWQgZXZpY3Rpb24gcG9saWN5ICR7ZXZpY3Rpb259YCk7XG59XG5cbnZhciBSZWNvaWxfdHJlZUNhY2hlRnJvbVBvbGljeSA9IHRyZWVDYWNoZUZyb21Qb2xpY3k7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBpc05vZGUob2JqZWN0KSB7XG4gIHZhciBfb3duZXJEb2N1bWVudCwgX2RvYyRkZWZhdWx0VmlldztcblxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkb2MgPSBvYmplY3QgIT0gbnVsbCA/IChfb3duZXJEb2N1bWVudCA9IG9iamVjdC5vd25lckRvY3VtZW50KSAhPT0gbnVsbCAmJiBfb3duZXJEb2N1bWVudCAhPT0gdm9pZCAwID8gX293bmVyRG9jdW1lbnQgOiBvYmplY3QgOiBkb2N1bWVudDtcbiAgY29uc3QgZGVmYXVsdFZpZXcgPSAoX2RvYyRkZWZhdWx0VmlldyA9IGRvYy5kZWZhdWx0VmlldykgIT09IG51bGwgJiYgX2RvYyRkZWZhdWx0VmlldyAhPT0gdm9pZCAwID8gX2RvYyRkZWZhdWx0VmlldyA6IHdpbmRvdztcbiAgcmV0dXJuICEhKG9iamVjdCAhPSBudWxsICYmICh0eXBlb2YgZGVmYXVsdFZpZXcuTm9kZSA9PT0gJ2Z1bmN0aW9uJyA/IG9iamVjdCBpbnN0YW5jZW9mIGRlZmF1bHRWaWV3Lk5vZGUgOiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJykpO1xufVxuXG52YXIgUmVjb2lsX2lzTm9kZSA9IGlzTm9kZTtcblxuY29uc3Qge1xuICBpc1JlYWN0TmF0aXZlOiBpc1JlYWN0TmF0aXZlJDEsXG4gIGlzU1NSOiBpc1NTUiQ0XG59ID0gUmVjb2lsX0Vudmlyb25tZW50O1xuXG5cblxuXG5cbmZ1bmN0aW9uIHNob3VsZE5vdEJlRnJvemVuKHZhbHVlKSB7XG4gIC8vIFByaW1pdGl2ZXMgYW5kIGZ1bmN0aW9uczpcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBSZWFjdCBlbGVtZW50czpcblxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlLiQkdHlwZW9mKSB7XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9IC8vIEltbXV0YWJsZSBzdHJ1Y3R1cmVzOlxuXG5cbiAgaWYgKHZhbHVlWydAQF9fSU1NVVRBQkxFX0lURVJBQkxFX19AQCddICE9IG51bGwgfHwgdmFsdWVbJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJ10gIT0gbnVsbCB8fCB2YWx1ZVsnQEBfX0lNTVVUQUJMRV9JTkRFWEVEX19AQCddICE9IG51bGwgfHwgdmFsdWVbJ0BAX19JTU1VVEFCTEVfT1JERVJFRF9fQEAnXSAhPSBudWxsIHx8IHZhbHVlWydAQF9fSU1NVVRBQkxFX1JFQ09SRF9fQEAnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gRE9NIG5vZGVzOlxuXG5cbiAgaWYgKFJlY29pbF9pc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoUmVjb2lsX2lzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFNvbWUgZW52aXJvbm1lbnRzLCBqdXN0IGFzIEplc3QsIGRvbid0IHdvcmsgd2l0aCB0aGUgaW5zdGFuY2VvZiBjaGVja1xuXG5cbiAgaWYgKCFpc1NTUiQ0ICYmICFpc1JlYWN0TmF0aXZlJDEgJiYgKCAvLyAkRmxvd0ZpeE1lKHNpdGU9cmVjb2lsKSBXaW5kb3cgZG9lcyBub3QgaGF2ZSBhIEZsb3dUeXBlIGRlZmluaXRpb24gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzY3MDlcbiAgdmFsdWUgPT09IHdpbmRvdyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFdpbmRvdykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gUmVjdXJzaXZlbHkgZnJlZXplIGEgdmFsdWUgdG8gZW5mb3JjZSBpdCBpcyByZWFkLW9ubHkuXG4vLyBUaGlzIG1heSBhbHNvIGhhdmUgbWluaW1hbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIGVudW1lcmF0aW5nXG4vLyBvYmplY3RzIChiYXNlZCBvbiBicm93c2VyIGltcGxlbWVudGF0aW9ucywgb2YgY291cnNlKVxuXG5cbmZ1bmN0aW9uIGRlZXBGcmVlemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBzaG91bGROb3RCZUZyb3plbih2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBPYmplY3QuZnJlZXplKHZhbHVlKTsgLy8gTWFrZSBhbGwgcHJvcGVydGllcyByZWFkLW9ubHlcblxuICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ10gYWRkZWQgd2hlbiBpbXByb3ZpbmcgdHlwaW5nIGZvciB0aGlzIHBhcmFtZXRlcnNcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICBjb25zdCBwcm9wID0gdmFsdWVba2V5XTsgLy8gUHJldmVudCBpbmZpbml0ZSByZWN1cnNzaW9uIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLlxuXG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdvYmplY3QnICYmIHByb3AgIT0gbnVsbCAmJiAhT2JqZWN0LmlzRnJvemVuKHByb3ApKSB7XG4gICAgICAgIGRlZXBGcmVlemVWYWx1ZShwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBPYmplY3Quc2VhbCh2YWx1ZSk7IC8vIFRoaXMgYWxzbyBtYWtlcyBleGlzdGluZyBwcm9wZXJ0aWVzIG5vbi1jb25maWd1cmFibGUuXG59XG5cbnZhciBSZWNvaWxfZGVlcEZyZWV6ZVZhbHVlID0gZGVlcEZyZWV6ZVZhbHVlO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqIEBlbWFpbHMgb25jYWxsK3JlY29pbFxuICogXG4gKiBAZm9ybWF0XG4gKlxuICogVGhpcyBpcyBhIHN0dWIgZm9yIHNvbWUgaW50ZWdyYXRpb24gaW50byBGQiBpbnRlcm5hbCBzdHVmZlxuICovXG5mdW5jdGlvbiBzdGFydFBlcmZCbG9jayhfaWQpIHtcbiAgcmV0dXJuICgpID0+IG51bGw7XG59XG5cbnZhciBSZWNvaWxfUGVyZm9ybWFuY2VUaW1pbmdzID0ge1xuICBzdGFydFBlcmZCbG9ja1xufTtcblxuY29uc3Qge1xuICBsb2FkYWJsZVdpdGhFcnJvcjogbG9hZGFibGVXaXRoRXJyb3IkMSxcbiAgbG9hZGFibGVXaXRoUHJvbWlzZTogbG9hZGFibGVXaXRoUHJvbWlzZSQxLFxuICBsb2FkYWJsZVdpdGhWYWx1ZTogbG9hZGFibGVXaXRoVmFsdWUkMlxufSA9IFJlY29pbF9Mb2FkYWJsZSQxO1xuXG5cblxuY29uc3Qge1xuICBnZXROb2RlTG9hZGFibGU6IGdldE5vZGVMb2FkYWJsZSQyLFxuICBwZWVrTm9kZUxvYWRhYmxlOiBwZWVrTm9kZUxvYWRhYmxlJDEsXG4gIHNldE5vZGVWYWx1ZTogc2V0Tm9kZVZhbHVlJDNcbn0gPSBSZWNvaWxfRnVuY3Rpb25hbENvcmU7XG5cbmNvbnN0IHtcbiAgc2F2ZURlcGVuZGVuY3lNYXBUb1N0b3JlOiBzYXZlRGVwZW5kZW5jeU1hcFRvU3RvcmUkMVxufSA9IFJlY29pbF9HcmFwaDtcblxuY29uc3Qge1xuICBERUZBVUxUX1ZBTFVFOiBERUZBVUxUX1ZBTFVFJDYsXG4gIFJlY29pbFZhbHVlTm90UmVhZHk6IFJlY29pbFZhbHVlTm90UmVhZHkkMixcbiAgZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyOiBnZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMSxcbiAgZ2V0Tm9kZTogZ2V0Tm9kZSQ2LFxuICByZWdpc3Rlck5vZGU6IHJlZ2lzdGVyTm9kZSQxXG59ID0gUmVjb2lsX05vZGU7XG5cbmNvbnN0IHtcbiAgaXNSZWNvaWxWYWx1ZTogaXNSZWNvaWxWYWx1ZSQzXG59ID0gUmVjb2lsX1JlY29pbFZhbHVlJDE7XG5cbmNvbnN0IHtcbiAgbWFya1JlY29pbFZhbHVlTW9kaWZpZWQ6IG1hcmtSZWNvaWxWYWx1ZU1vZGlmaWVkJDFcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2U7XG5cbmNvbnN0IHtcbiAgcmV0YWluZWRCeU9wdGlvbldpdGhEZWZhdWx0OiByZXRhaW5lZEJ5T3B0aW9uV2l0aERlZmF1bHQkMVxufSA9IFJlY29pbF9SZXRlbnRpb247XG5cbmNvbnN0IHtcbiAgcmVjb2lsQ2FsbGJhY2s6IHJlY29pbENhbGxiYWNrJDFcbn0gPSBSZWNvaWxfdXNlUmVjb2lsQ2FsbGJhY2s7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IHtcbiAgc3RhcnRQZXJmQmxvY2s6IHN0YXJ0UGVyZkJsb2NrJDFcbn0gPSBSZWNvaWxfUGVyZm9ybWFuY2VUaW1pbmdzO1xuXG5jbGFzcyBDYW5jZWxlZCB7fVxuXG5jb25zdCBDQU5DRUxFRCA9IG5ldyBDYW5jZWxlZCgpO1xuLyoqXG4gKiBBbiBFeGVjdXRpb25JZCBpcyBhbiBhcmJpdHJhcnkgSUQgdGhhdCBsZXRzIHVzIGRpc3Rpbmd1aXNoIGV4ZWN1dGlvbnMgZnJvbVxuICogZWFjaCBvdGhlci4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgd2UgbmVlZCBhIHdheSBvZiBzb2x2aW5nIHRoaXMgcHJvYmxlbTpcbiAqIFwiZ2l2ZW4gMyBhc3luYyBleGVjdXRpb25zLCBvbmx5IHVwZGF0ZSBzdGF0ZSBmb3IgdGhlICdsYXRlc3QnIGV4ZWN1dGlvbiB3aGVuXG4gKiBpdCBmaW5pc2hlcyBydW5uaW5nIHJlZ2FyZGxlc3Mgb2Ygd2hlbiB0aGUgb3RoZXIgMiBmaW5pc2hcIi4gRXhlY3V0aW9uSWRzXG4gKiBwcm92aWRlIGEgY29udmVuaWVudCB3YXkgb2YgaWRlbnRpZnlpbmcgZXhlY3V0aW9ucyBzbyB0aGF0IHdlIGNhbiB0cmFjayBhbmRcbiAqIG1hbmFnZSB0aGVtIG92ZXIgdGltZS5cbiAqL1xuXG5jb25zdCBkZXBlbmRlbmN5U3RhY2sgPSBbXTsgLy8gZm9yIGRldGVjdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG5cbmNvbnN0IHdhaXRpbmdTdG9yZXMgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGdldE5ld0V4ZWN1dGlvbklkID0gKCgpID0+IHtcbiAgbGV0IGV4ZWN1dGlvbklkID0gMDtcbiAgcmV0dXJuICgpID0+IGV4ZWN1dGlvbklkKys7XG59KSgpO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVkZWNsYXJlICovXG5cblxuZnVuY3Rpb24gc2VsZWN0b3Iob3B0aW9ucykge1xuICBsZXQgcmVjb2lsVmFsdWUgPSBudWxsO1xuICBjb25zdCB7XG4gICAga2V5LFxuICAgIGdldCxcbiAgICBjYWNoZVBvbGljeV9VTlNUQUJMRTogY2FjaGVQb2xpY3lcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNldCA9IG9wdGlvbnMuc2V0ICE9IG51bGwgPyBvcHRpb25zLnNldCA6IHVuZGVmaW5lZDsgLy8gZmxvd1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IFJlY29pbF9lcnIoJ0Ega2V5IG9wdGlvbiB3aXRoIGEgdW5pcXVlIHN0cmluZyB2YWx1ZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3JlYXRpbmcgYSBzZWxlY3Rvci4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgUmVjb2lsX2VycignU2VsZWN0b3JzIG11c3Qgc3BlY2lmeSBhIGdldCBjYWxsYmFjayBvcHRpb24gdG8gZ2V0IHRoZSBzZWxlY3RvciB2YWx1ZS4nKTtcbiAgICB9XG4gIH0gLy8gVGhpcyBpcyBldmVyeSBkaXNjb3ZlcmVkIGRlcGVuZGVuY3kgYWNyb3NzIGFsbCBleGVjdXRpb25zXG5cblxuICBjb25zdCBkaXNjb3ZlcmVkRGVwZW5kZW5jeU5vZGVLZXlzID0gbmV3IFNldCgpO1xuICBjb25zdCBjYWNoZSA9IFJlY29pbF90cmVlQ2FjaGVGcm9tUG9saWN5KGNhY2hlUG9saWN5ICE9PSBudWxsICYmIGNhY2hlUG9saWN5ICE9PSB2b2lkIDAgPyBjYWNoZVBvbGljeSA6IHtcbiAgICBlcXVhbGl0eTogJ3JlZmVyZW5jZScsXG4gICAgZXZpY3Rpb246ICdrZWVwLWFsbCdcbiAgfSk7XG4gIGNvbnN0IHJldGFpbmVkQnkgPSByZXRhaW5lZEJ5T3B0aW9uV2l0aERlZmF1bHQkMShvcHRpb25zLnJldGFpbmVkQnlfVU5TVEFCTEUpO1xuICBjb25zdCBleGVjdXRpb25JbmZvTWFwID0gbmV3IE1hcCgpO1xuICBsZXQgbGl2ZVN0b3Jlc0NvdW50ID0gMDtcblxuICBmdW5jdGlvbiBzZWxlY3RvcklzTGl2ZSgpIHtcbiAgICByZXR1cm4gIVJlY29pbF9na3goJ3JlY29pbF9tZW1vcnlfbWFuYWdhbWVudF8yMDIwJykgfHwgbGl2ZVN0b3Jlc0NvdW50ID4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9ySW5pdChzdG9yZSkge1xuICAgIHN0b3JlLmdldFN0YXRlKCkua25vd25TZWxlY3RvcnMuYWRkKGtleSk7XG4gICAgbGl2ZVN0b3Jlc0NvdW50Kys7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxpdmVTdG9yZXNDb3VudC0tO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RvclNob3VsZERlbGV0ZUNvbmZpZ09uUmVsZWFzZSgpIHtcbiAgICByZXR1cm4gZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyJDEoa2V5KSAhPT0gdW5kZWZpbmVkICYmICFzZWxlY3RvcklzTGl2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUFzeW5jKHN0b3JlLCBzdGF0ZSwgZXhlY3V0aW9uSWQsIGxvYWRhYmxlLCBkZXBWYWx1ZXMpIHtcbiAgICBzZXRDYWNoZShzdGF0ZSwgbG9hZGFibGUsIGRlcFZhbHVlcyk7XG4gICAgc2V0RGVwc0luU3RvcmUoc3RvcmUsIHN0YXRlLCBuZXcgU2V0KGRlcFZhbHVlcy5rZXlzKCkpLCBleGVjdXRpb25JZCk7XG4gICAgbm90aWZ5U3RvcmVzT2ZSZXNvbHZlZEFzeW5jKHN0b3JlLCBleGVjdXRpb25JZCk7XG4gIH1cblxuICBmdW5jdGlvbiBub3RpZnlTdG9yZXNPZlJlc29sdmVkQXN5bmMoc3RvcmUsIGV4ZWN1dGlvbklkKSB7XG4gICAgaWYgKGlzTGF0ZXN0RXhlY3V0aW9uKHN0b3JlLCBleGVjdXRpb25JZCkpIHtcbiAgICAgIGNsZWFyRXhlY3V0aW9uSW5mbyhzdG9yZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVzID0gd2FpdGluZ1N0b3Jlcy5nZXQoZXhlY3V0aW9uSWQpO1xuXG4gICAgaWYgKHN0b3JlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHdhaXRpbmdTdG9yZSBvZiBzdG9yZXMpIHtcbiAgICAgICAgbWFya1JlY29pbFZhbHVlTW9kaWZpZWQkMSh3YWl0aW5nU3RvcmUsIFJlY29pbF9udWxsdGhyb3dzKHJlY29pbFZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIHdhaXRpbmdTdG9yZXMuZGVsZXRlKGV4ZWN1dGlvbklkKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrU3RvcmVXYWl0aW5nRm9yUmVzb2x2ZWRBc3luYyhzdG9yZSwgZXhlY3V0aW9uSWQpIHtcbiAgICBsZXQgc3RvcmVzID0gd2FpdGluZ1N0b3Jlcy5nZXQoZXhlY3V0aW9uSWQpO1xuXG4gICAgaWYgKHN0b3JlcyA9PSBudWxsKSB7XG4gICAgICB3YWl0aW5nU3RvcmVzLnNldChleGVjdXRpb25JZCwgc3RvcmVzID0gbmV3IFNldCgpKTtcbiAgICB9XG5cbiAgICBzdG9yZXMuYWRkKHN0b3JlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENhY2hlZE5vZGVMb2FkYWJsZShzdG9yZSwgc3RhdGUsIG5vZGVLZXkpIHtcbiAgICBjb25zdCBpc0tleVBvaW50aW5nVG9TZWxlY3RvciA9IHN0b3JlLmdldFN0YXRlKCkua25vd25TZWxlY3RvcnMuaGFzKG5vZGVLZXkpO1xuICAgIC8qKlxuICAgICAqIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgYnlwYXNzIGNhbGxpbmcgZ2V0Tm9kZUxvYWRhYmxlIGZvciBhdG9tc1xuICAgICAqIGFzIGdldE5vZGVMb2FkYWJsZSBoYXMgc2lkZSBlZmZlY3RzIGluIHN0YXRlXG4gICAgICovXG5cbiAgICBpZiAoaXNLZXlQb2ludGluZ1RvU2VsZWN0b3IgJiYgc3RhdGUuYXRvbVZhbHVlcy5oYXMobm9kZUtleSkpIHtcbiAgICAgIHJldHVybiBSZWNvaWxfbnVsbHRocm93cyhzdGF0ZS5hdG9tVmFsdWVzLmdldChub2RlS2V5KSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGFibGUgPSBnZXROb2RlTG9hZGFibGUkMihzdG9yZSwgc3RhdGUsIG5vZGVLZXkpO1xuXG4gICAgaWYgKGxvYWRhYmxlLnN0YXRlICE9PSAnbG9hZGluZycgJiYgaXNLZXlQb2ludGluZ1RvU2VsZWN0b3IpIHtcbiAgICAgIHN0YXRlLmF0b21WYWx1ZXMuc2V0KG5vZGVLZXksIGxvYWRhYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZGFibGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYXR0YWNoZXMgYSB0aGVuKCkgYW5kIGEgY2F0Y2goKSB0byBhIHByb21pc2UgdGhhdCB3YXNcbiAgICogcmV0dXJuZWQgZnJvbSBhIHNlbGVjdG9yJ3MgZ2V0KCkgKGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgYnlcbiAgICogcnVubmluZyBhIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgXCJhc3luY1wiIGtleXdvcmQpLiBJZiBhIHNlbGVjdG9yJ3MgZ2V0KClcbiAgICogcmV0dXJucyBhIHByb21pc2UsIHdlIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXM6XG4gICAqXG4gICAqIDEuIFRoZSBwcm9taXNlIHdpbGwgcmVzb2x2ZSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGhhdmUgY29tcGxldGVseSBmaW5pc2hlZFxuICAgKiAgICBleGVjdXRpbmcgd2l0aG91dCBhbnkgcmVtYWluaW5nIHBlbmRpbmcgZGVwZW5kZW5jaWVzLiBObyBtb3JlIHJldHJpZXNcbiAgICogICAgYXJlIG5lZWRlZCBhbmQgd2UgY2FuIHByb2NlZWQgd2l0aCB1cGRhdGluZyB0aGUgY2FjaGUgYW5kIG5vdGlmeWluZ1xuICAgKiAgICBzdWJzY3JpYmVycyAoaWYgaXQgaXMgdGhlIGxhdGVzdCBleGVjdXRpb24sIG90aGVyd2lzZSBvbmx5IHRoZSBjYWNoZVxuICAgKiAgICB3aWxsIGJlIHVwZGF0ZWQgYW5kIHN1YnNjcmlwdGlvbnMgd2lsbCBub3QgYmUgZmlyZWQpLiBUaGlzIGlzIHRoZSBjYXNlXG4gICAqICAgIGhhbmRsZWQgYnkgdGhlIGF0dGFjaGVkIHRoZW4oKSBoYW5kbGVyLlxuICAgKlxuICAgKiAyLiBUaGUgcHJvbWlzZSB3aWxsIHRocm93IGJlY2F1c2UgaXQgZWl0aGVyIGhhcyBhbiBlcnJvciBvciBpdCBjYW1lIGFjcm9zc1xuICAgKiAgICBhbiBhc3luYyBkZXBlbmRlbmN5IHRoYXQgaGFzIG5vdCB5ZXQgcmVzb2x2ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbFxuICAgKiAgICBjYWxsIHdyYXBEZXBkZW5jeVByb21pc2UoKSwgd2hvc2UgcmVzcG9uc2liaWxpdHkgaXMgdG8gaGFuZGxlIGRlcGVuZGVuY3lcbiAgICogICAgcHJvbWlzZXMuIFRoaXMgY2FzZSBpcyBoYW5kbGVkIGJ5IHRoZSBhdHRhY2hlZCBjYXRjaCgpIGhhbmRsZXIuXG4gICAqXG4gICAqIEJvdGggYnJhbmNoZXMgd2lsbCBldmVudHVhbGx5IHJlc29sdmUgdG8gdGhlIGZpbmFsIHJlc3VsdCBvZiB0aGUgc2VsZWN0b3JcbiAgICogKG9yIGFuIGVycm9yIGlmIGEgcmVhbCBlcnJvciBvY2N1cnJlZCkuXG4gICAqXG4gICAqIFRoZSBleGVjdXRpb24gd2lsbCBydW4gdG8gY29tcGxldGlvbiBldmVuIGlmIGl0IGlzIHN0YWxlLCBhbmQgaXRzIHZhbHVlXG4gICAqIHdpbGwgYmUgY2FjaGVkLiBCdXQgc3RhbGUgZXhlY3V0aW9ucyB3aWxsIG5vdCB1cGRhdGUgZ2xvYmFsIHN0YXRlIG9yIHVwZGF0ZVxuICAgKiBleGVjdXRpb25JbmZvIGFzIHRoYXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSAnbGF0ZXN0JyBleGVjdXRpb24uXG4gICAqXG4gICAqIE5vdGUgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHBhc3NlZCBhIHByb21pc2UgdGhhdCB3YXMgdGhyb3duLS1BS0EgYVxuICAgKiBkZXBlbmRlbmN5IHByb21pc2UuIERlcGVuZGVuY3kgcHJvbWlzZXMgc2hvdWxkIGJlIHBhc3NlZCB0b1xuICAgKiB3cmFwUGVuZGluZ0RlcGVuZGVuY3lQcm9taXNlKCkpLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdyYXBQZW5kaW5nUHJvbWlzZShzdG9yZSwgcHJvbWlzZSwgc3RhdGUsIGRlcFZhbHVlcywgZXhlY3V0aW9uSWQsIGxvYWRpbmdEZXBzU3RhdGUpIHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKHZhbHVlID0+IHtcbiAgICAgIGlmICghc2VsZWN0b3JJc0xpdmUoKSkge1xuICAgICAgICAvLyBUaGUgc2VsZWN0b3Igd2FzIHJlbGVhc2VkIHNpbmNlIHRoZSByZXF1ZXN0IGJlZ2FuOyBpZ25vcmUgdGhlIHJlc3BvbnNlLlxuICAgICAgICBjbGVhckV4ZWN1dGlvbkluZm8oc3RvcmUpO1xuICAgICAgICB0aHJvdyBDQU5DRUxFRDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZGFibGUgPSBsb2FkYWJsZVdpdGhWYWx1ZSQyKHZhbHVlKTtcbiAgICAgIHJlc29sdmVBc3luYyhzdG9yZSwgc3RhdGUsIGV4ZWN1dGlvbklkLCBsb2FkYWJsZSwgZGVwVmFsdWVzKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KS5jYXRjaChlcnJvck9yUHJvbWlzZSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdG9ySXNMaXZlKCkpIHtcbiAgICAgICAgLy8gVGhlIHNlbGVjdG9yIHdhcyByZWxlYXNlZCBzaW5jZSB0aGUgcmVxdWVzdCBiZWdhbjsgaWdub3JlIHRoZSByZXNwb25zZS5cbiAgICAgICAgY2xlYXJFeGVjdXRpb25JbmZvKHN0b3JlKTtcbiAgICAgICAgdGhyb3cgQ0FOQ0VMRUQ7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZUV4ZWN1dGlvbkluZm9EZXBWYWx1ZXMoc3RvcmUsIGV4ZWN1dGlvbklkLCBkZXBWYWx1ZXMpO1xuXG4gICAgICBpZiAoUmVjb2lsX2lzUHJvbWlzZShlcnJvck9yUHJvbWlzZSkpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBQZW5kaW5nRGVwZW5kZW5jeVByb21pc2Uoc3RvcmUsIGVycm9yT3JQcm9taXNlLCBzdGF0ZSwgZGVwVmFsdWVzLCBleGVjdXRpb25JZCwgbG9hZGluZ0RlcHNTdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvYWRhYmxlID0gbG9hZGFibGVXaXRoRXJyb3IkMShlcnJvck9yUHJvbWlzZSk7XG4gICAgICByZXNvbHZlQXN5bmMoc3RvcmUsIHN0YXRlLCBleGVjdXRpb25JZCwgbG9hZGFibGUsIGRlcFZhbHVlcyk7XG4gICAgICB0aHJvdyBlcnJvck9yUHJvbWlzZTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBhdHRhY2hlcyBhIHRoZW4oKSBhbmQgYSBjYXRjaCgpIHRvIGEgcHJvbWlzZSB0aGF0IHdhc1xuICAgKiB0aHJvd24gZnJvbSBhIHNlbGVjdG9yJ3MgZ2V0KCkuIElmIGEgc2VsZWN0b3IncyBnZXQoKSB0aHJvd3MgYSBwcm9taXNlLFxuICAgKiB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVzOlxuICAgKlxuICAgKiAxLiBUaGUgcHJvbWlzZSB3aWxsIHJlc29sdmUsIG1lYW5pbmcgb25lIG9mIG91ciBzZWxlY3RvcidzIGRlcGVuZGVuY2llcyBpc1xuICAgKiAgICBub3cgYXZhaWxhYmxlIGFuZCB3ZSBzaG91bGQgXCJyZXRyeVwiIG91ciBnZXQoKSBieSBydW5uaW5nIGl0IGFnYWluLiBUaGlzXG4gICAqICAgIGlzIHRoZSBjYXNlIGhhbmRsZWQgYnkgdGhlIGF0dGFjaGVkIHRoZW4oKSBoYW5kbGVyLlxuICAgKlxuICAgKiAyLiBUaGUgcHJvbWlzZSB3aWxsIHRocm93IGJlY2F1c2Ugc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgZGVwZW5kZW5jeVxuICAgKiAgICBwcm9taXNlIChpbiBvdGhlciB3b3JkcyBhIHJlYWwgZXJyb3Igb2NjdXJyZWQpLiBUaGlzIGNhc2UgaXMgaGFuZGxlZCBieVxuICAgKiAgICB0aGUgYXR0YWNoZWQgY2F0Y2goKSBoYW5kbGVyLiBJZiB0aGUgZGVwZW5kZW5jeSBwcm9taXNlIHRocm93cywgaXQgaXNcbiAgICogICAgX2Fsd2F5c18gYSByZWFsIGVycm9yIGFuZCBub3QgYW5vdGhlciBkZXBlbmRlbmN5IHByb21pc2UgKGFueSBkZXBlbmRlbmN5XG4gICAqICAgIHByb21pc2VzIHdvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIHVwc3RyZWFtKS5cbiAgICpcbiAgICogVGhlIHRoZW4oKSBicmFuY2ggd2lsbCBldmVudHVhbGx5IHJlc29sdmUgdG8gdGhlIGZpbmFsIHJlc3VsdCBvZiB0aGVcbiAgICogc2VsZWN0b3IgKG9yIGFuIGVycm9yIGlmIGEgcmVhbCBlcnJvciBvY2N1cnMpLCBhbmQgdGhlIGNhdGNoKCkgd2lsbCBhbHdheXNcbiAgICogcmVzb2x2ZSB0byBhbiBlcnJvciBiZWNhdXNlIHRoZSBkZXBlbmRlbmN5IHByb21pc2UgaXMgYSBwcm9taXNlIHRoYXQgd2FzXG4gICAqIHdyYXBwZWQgdXBzdHJlYW0sIG1lYW5pbmcgaXQgd2lsbCBvbmx5IHJlc29sdmUgdG8gaXRzIHJlYWwgdmFsdWUgb3IgdG8gYVxuICAgKiByZWFsIGVycm9yLlxuICAgKlxuICAgKiBUaGUgZXhlY3V0aW9uIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gZXZlbiBpZiBpdCBpcyBzdGFsZSwgYW5kIGl0cyB2YWx1ZVxuICAgKiB3aWxsIGJlIGNhY2hlZC4gQnV0IHN0YWxlIGV4ZWN1dGlvbnMgd2lsbCBub3QgdXBkYXRlIGdsb2JhbCBzdGF0ZSBvciB1cGRhdGVcbiAgICogZXhlY3V0aW9uSW5mbyBhcyB0aGF0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgJ2xhdGVzdCcgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBOb3RlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBwYXNzZWQgYSBwcm9taXNlIHRoYXQgd2FzIHJldHVybmVkIGZyb21cbiAgICogZ2V0KCkuIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgcGFzc2VkIHByb21pc2VzIHRoYXRcbiAgICogd2VyZSB0aHJvd24gZHVlIHRvIGEgcGVuZGluZyBkZXBlbmRlbmN5LiBQcm9taXNlcyByZXR1cm5lZCBieSBnZXQoKSBzaG91bGRcbiAgICogYmUgcGFzc2VkIHRvIHdyYXBQZW5kaW5nUHJvbWlzZSgpIGluc3RlYWQuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd3JhcFBlbmRpbmdEZXBlbmRlbmN5UHJvbWlzZShzdG9yZSwgcHJvbWlzZSwgc3RhdGUsIGV4aXN0aW5nRGVwcywgZXhlY3V0aW9uSWQsIGxvYWRpbmdEZXBzU3RhdGUpIHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKHJlc29sdmVkRGVwID0+IHtcbiAgICAgIGlmICghc2VsZWN0b3JJc0xpdmUoKSkge1xuICAgICAgICAvLyBUaGUgc2VsZWN0b3Igd2FzIHJlbGVhc2VkIHNpbmNlIHRoZSByZXF1ZXN0IGJlZ2FuOyBpZ25vcmUgdGhlIHJlc3BvbnNlLlxuICAgICAgICBjbGVhckV4ZWN1dGlvbkluZm8oc3RvcmUpO1xuICAgICAgICB0aHJvdyBDQU5DRUxFRDtcbiAgICAgIH0gLy8gQ2hlY2sgaWYgd2UgYXJlIGhhbmRsaW5nIGEgcGVuZGluZyBSZWNvaWwgZGVwZW5kZW5jeSBvciBpZiB0aGUgdXNlclxuICAgICAgLy8gdGhyZXcgdGhlaXIgb3duIFByb21pc2UgdG8gXCJzdXNwZW5kXCIgYSBzZWxlY3RvciBldmFsdWF0aW9uLiAgV2UgbmVlZFxuICAgICAgLy8gdG8gY2hlY2sgdGhhdCB0aGUgbG9hZGluZ0RlcFByb21pc2UgYWN0dWFsbHkgbWF0Y2hlcyB0aGUgcHJvbWlzZSB0aGF0XG4gICAgICAvLyB3ZSBjYXVnaHQgaW4gY2FzZSB0aGUgc2VsZWN0b3IgaGFwcGVuZWQgdG8gY2F0Y2ggdGhlIHByb21pc2Ugd2UgdGhyZXdcbiAgICAgIC8vIGZvciBhIHBlbmRpbmcgUmVjb2lsIGRlcGVuZGVuY3kgZnJvbSBgZ2V0UmVjb2lsVmFsdWUoKWAgYW5kIHRocmV3XG4gICAgICAvLyB0aGVpciBvd24gcHJvbWlzZSBpbnN0ZWFkLlxuXG5cbiAgICAgIGlmIChsb2FkaW5nRGVwc1N0YXRlLmxvYWRpbmdEZXBLZXkgIT0gbnVsbCAmJiBsb2FkaW5nRGVwc1N0YXRlLmxvYWRpbmdEZXBQcm9taXNlID09PSBwcm9taXNlKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOb3RlIGZvciBhc3luYyBhdG9tcywgdGhpcyBtZWFucyB3ZSBhcmUgY2hhbmdpbmcgdGhlIGF0b20ncyB2YWx1ZVxuICAgICAgICAgKiBpbiB0aGUgc3RvcmUgZm9yIHRoZSBnaXZlbiB2ZXJzaW9uLiBUaGlzIHNob3VsZCBiZSBhbHJpZ2h0IGJlY2F1c2VcbiAgICAgICAgICogdGhlIHZlcnNpb24gb2Ygc3RhdGUgaXMgbm93IHN0YWxlIGFuZCBhIG5ldyB2ZXJzaW9uIHdpbGwgaGF2ZVxuICAgICAgICAgKiBhbHJlYWR5IGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBhdG9tIGJlaW5nIHJlc29sdmVkIChzZWUgdGhpcyBsb2dpY1xuICAgICAgICAgKiBpbiBSZWNvaWxfYXRvbS5qcylcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRlLmF0b21WYWx1ZXMuc2V0KGxvYWRpbmdEZXBzU3RhdGUubG9hZGluZ0RlcEtleSwgbG9hZGFibGVXaXRoVmFsdWUkMihyZXNvbHZlZERlcCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHJlc29sdmVkRGVwS2V5IGlzIG5vdCBkZWZpbmVkLCB0aGUgcHJvbWlzZSB3YXMgYSB1c2VyLXRocm93blxuICAgICAgICAgKiBwcm9taXNlLiBVc2VyLXRocm93biBwcm9taXNlcyBhcmUgYW4gYWR2YW5jZWQgZmVhdHVyZSBhbmQgdGhleVxuICAgICAgICAgKiBzaG91bGQgYmUgYXZvaWRlZCBpbiBhbG1vc3QgYWxsIGNhc2VzLiBVc2luZyBgbG9hZGFibGUubWFwKClgIGluc2lkZVxuICAgICAgICAgKiBvZiBzZWxlY3RvcnMgZm9yIGxvYWRpbmcgbG9hZGFibGVzIGFuZCB0aGVuIHRocm93aW5nIHRoYXQgbWFwcGVkXG4gICAgICAgICAqIGxvYWRhYmxlJ3MgcHJvbWlzZSBpcyBhbiBleGFtcGxlIG9mIGEgdXNlci10aHJvd24gcHJvbWlzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogV2hlbiB3ZSBoaXQgYSB1c2VyLXRocm93biBwcm9taXNlLCB3ZSBoYXZlIHRvIGJhaWwgb3V0IG9mIGFuIG9wdGltaXphdGlvblxuICAgICAgICAgKiB3aGVyZSB3ZSBieXBhc3MgY2FsY3VsYXRpbmcgc2VsZWN0b3IgY2FjaGUga2V5cyBmb3Igc2VsZWN0b3JzIHRoYXRcbiAgICAgICAgICogaGF2ZSBiZWVuIHByZXZpb3VzbHkgc2VlbiBmb3IgYSBnaXZlbiBzdGF0ZSAodGhlc2Ugc2VsZWN0b3JzIGFyZSBzYXZlZCBpblxuICAgICAgICAgKiBzdGF0ZS5hdG9tVmFsdWVzKSB0byBhdm9pZCBzdGFsZSBzdGF0ZSBhcyB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nXG4gICAgICAgICAqIHdoYXQgc3RhdGUgY2hhbmdlcyBoYXBwZW5lZCAoaWYgYW55KSBpbiByZXN1bHQgdG8gdGhlIHByb21pc2UgcmVzb2x2aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJZGVhbGx5IHdlIHdvdWxkIG9ubHkgYmFpbCBvdXQgc2VsZWN0b3JzIHRoYXQgYXJlIGluIHRoZSBjaGFpbiBvZlxuICAgICAgICAgKiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgc2VsZWN0b3IsIGJ1dCB0aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgdG8gZ2V0XG4gICAgICAgICAqIGEgZnVsbCBsaXN0IG9mIGEgc2VsZWN0b3IncyBkb3duc3RyZWFtIG5vZGVzIGJlY2F1c2UgdGhlIHN0YXRlIHRoYXRcbiAgICAgICAgICogaXMgZXhlY3V0aW5nIG1heSBiZSBhIGRpc2NhcmRlZCB0cmVlIChzbyBzdG9yZS5nZXRHcmFwaChzdGF0ZS52ZXJzaW9uKVxuICAgICAgICAgKiB3aWxsIGJlIGVtcHR5KSwgYW5kIHRoZSBmdWxsIGRlcCB0cmVlIG1heSBub3QgYmUgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAgICAqIGNhY2hlcyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc2VsZWN0b3IncyBjYWNoZSB3YXMgY2xlYXJlZC4gVG8gc29sdmVcbiAgICAgICAgICogZm9yIHRoaXMgd2Ugd291bGQgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGFsbCBydW5uaW5nIHNlbGVjdG9yXG4gICAgICAgICAqIGV4ZWN1dGlvbnMgYW5kIHRoZWlyIGRvd25zdHJlYW0gZGVwcy4gQmVjYXVzZSB0aGlzIG9ubHkgY292ZXJzIGVkZ2VcbiAgICAgICAgICogY2FzZXMsIHRoYXQgY29tcGxleGl0eSBtaWdodCBub3QgYmUganVzdGlmeWFibGUuXG4gICAgICAgICAqL1xuICAgICAgICBzdG9yZS5nZXRTdGF0ZSgpLmtub3duU2VsZWN0b3JzLmZvckVhY2gobm9kZUtleSA9PiB7XG4gICAgICAgICAgc3RhdGUuYXRvbVZhbHVlcy5kZWxldGUobm9kZUtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBPcHRpbWl6YXRpb246IE5vdyB0aGF0IHRoZSBkZXBlbmRlbmN5IGhhcyByZXNvbHZlZCwgbGV0J3MgdHJ5IGhpdHRpbmdcbiAgICAgICAqIHRoZSBjYWNoZSBpbiBjYXNlIHRoZSBkZXAgcmVzb2x2ZWQgdG8gYSB2YWx1ZSB3ZSBoYXZlIHByZXZpb3VzbHkgc2Vlbi5cbiAgICAgICAqXG4gICAgICAgKiBUT0RPOlxuICAgICAgICogTm90ZSB0aGlzIG9wdGltaXphdGlvbiBpcyBub3QgcGVyZmVjdCBiZWNhdXNlIGl0IG9ubHkgcHJldmVudHMgcmUtZXhlY3V0aW9uc1xuICAgICAgICogX2FmdGVyXyB0aGUgcG9pbnQgd2hlcmUgYW4gYXN5bmMgZGVwZW5kZW5jeSBpcyBmb3VuZC4gQW55IGNvZGUgbGVhZGluZ1xuICAgICAgICogdXAgdG8gdGhlIGFzeW5jIGRlcGVuZGVuY3kgbWF5IGhhdmUgcnVuIHVubmVjZXNzYXJpbHkuIFRoZSBpZGVhbCBjYXNlXG4gICAgICAgKiB3b3VsZCBiZSB0byB3YWl0IGZvciB0aGUgYXN5bmMgZGVwZW5kZW5jeSB0byByZXNvbHZlIGZpcnN0LCBjaGVjayB0aGVcbiAgICAgICAqIGNhY2hlLCBhbmQgcHJldmVudCBfYW55XyBleGVjdXRpb24gb2YgdGhlIHNlbGVjdG9yIGlmIHRoZSByZXN1bHRpbmdcbiAgICAgICAqIHZhbHVlIG9mIHRoZSBkZXBlbmRlbmN5IGxlYWRzIHRvIGEgcGF0aCB0aGF0IGlzIGZvdW5kIGluIHRoZSBjYWNoZS5cbiAgICAgICAqIFRoZSBpZGVhbCBjYXNlIGlzIG1vcmUgZGlmZmljdWx0IHRvIGltcGxlbWVudCBhcyBpdCB3b3VsZCByZXF1aXJlIHRoYXRcbiAgICAgICAqIHdlIGNhcHR1cmUgYW5kIHdhaXQgZm9yIHRoZSB0aGUgYXN5bmMgZGVwZW5kZW5jeSByaWdodCBhZnRlciBjaGVja2luZ1xuICAgICAgICogdGhlIGNhY2hlLiBUaGUgY3VycmVudCBhcHByb2FjaCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBydW5uaW5nXG4gICAgICAgKiB0aGUgc2VsZWN0b3IgYWxyZWFkeSBoYXMgYSBjb2RlIHBhdGggdGhhdCBsZXRzIHVzIGV4aXQgZWFybHkgd2hlblxuICAgICAgICogYW4gYXN5bmMgZGVwIHJlc29sdmVzLlxuICAgICAgICovXG5cblxuICAgICAgY29uc3QgY2FjaGVkTG9hZGFibGUgPSBnZXRWYWxGcm9tQ2FjaGVBbmRVcGRhdGVkRG93bnN0cmVhbURlcHMoc3RvcmUsIHN0YXRlKTtcblxuICAgICAgaWYgKGNhY2hlZExvYWRhYmxlICYmIGNhY2hlZExvYWRhYmxlLnN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaGFzIHRvIG5vdGlmeSBzdG9yZXMgb2YgYSByZXNvbHZlZCBhc3luYywgZXZlbiBpZiB0aGVyZSBpcyBub1xuICAgICAgICAgKiBjdXJyZW50IHBlbmRpbmcgZXhlY3V0aW9uIGZvciB0aGUgZm9sbG93aW5nIGNhc2U6XG4gICAgICAgICAqIDEpIEEgY29tcG9uZW50IHJlbmRlcnMgd2l0aCB0aGlzIHBlbmRpbmcgbG9hZGFibGUuXG4gICAgICAgICAqIDIpIFRoZSB1cHN0cmVhbSBkZXBlbmRlbmN5IHJlc29sdmVzLlxuICAgICAgICAgKiAzKSBXaGlsZSBwcm9jZXNzaW5nIHNvbWUgb3RoZXIgc2VsZWN0b3IgaXQgcmVhZHMgdGhpcyBvbmUsIHN1Y2ggYXNcbiAgICAgICAgICogICAgd2hpbGUgdHJhdmVyc2luZyBpdHMgZGVwZW5kZW5jaWVzLiAgQXQgdGhpcyBwb2ludCBpdCBnZXRzIHRoZVxuICAgICAgICAgKiAgICBuZXcgcmVzb2x2ZWQgdmFsdWUgc3luY2hyb25vdXNseSBhbmQgY2xlYXJzIHRoZSBjdXJyZW50XG4gICAgICAgICAqICAgIGV4ZWN1dGlvbiBJRC4gIFRoZSBjb21wb25lbnQgd2Fzbid0IGdldHRpbmcgdGhlIHZhbHVlIGl0c2VsZixcbiAgICAgICAgICogICAgdGhvdWdoLCBzbyBpdCBzdGlsbCBoYXMgdGhlIHBlbmRpbmcgbG9hZGFibGUuXG4gICAgICAgICAqIDQpIFdoZW4gdGhpcyBjb2RlIGV4ZWN1dGVzIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBpZCB3YXMgY2xlYXJlZFxuICAgICAgICAgKiAgICBhbmQgaXQgd291bGRuJ3Qgbm90aWZ5IHRoZSBjb21wb25lbnQgb2YgdGhlIG5ldyB2YWx1ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogSSB0aGluayB0aGlzIGlzIG9ubHkgYW4gaXNzdWUgd2l0aCBcImVhcmx5XCIgcmVuZGVyaW5nIHNpbmNlIHRoZVxuICAgICAgICAgKiBjb21wb25lbnRzIGdvdCB0aGVpciB2YWx1ZSB1c2luZyB0aGUgaW4tcHJvZ3Jlc3MgZXhlY3V0aW9uLlxuICAgICAgICAgKiBXZSBkb24ndCBoYXZlIGEgdW5pdCB0ZXN0IGZvciB0aGlzIGNhc2UgeWV0LiAgSSdtIG5vdCBzdXJlIGl0IGlzXG4gICAgICAgICAqIG5lY2Vzc2FyeSB3aXRoIHJlY29pbF9jb25jdXJyZW50X3N1cHBvcnQgbW9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0xhdGVzdEV4ZWN1dGlvbihzdG9yZSwgZXhlY3V0aW9uSWQpIHx8IGdldEV4ZWN1dGlvbkluZm8oc3RvcmUpID09IG51bGwpIHtcbiAgICAgICAgICBub3RpZnlTdG9yZXNPZlJlc29sdmVkQXN5bmMoc3RvcmUsIGV4ZWN1dGlvbklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRMb2FkYWJsZS5zdGF0ZSA9PT0gJ2hhc1ZhbHVlJykge1xuICAgICAgICAgIHJldHVybiBjYWNoZWRMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBjYWNoZWRMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0aGlzIGV4ZWN1dGlvbiBpcyBzdGFsZSwgbGV0J3MgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWUgaW5cbiAgICAgICAqIHByb2dyZXNzIGV4ZWN1dGlvbiB3aXRoIGEgbWF0Y2hpbmcgc3RhdGUuIElmIHdlIGZpbmQgYSBtYXRjaCwgdGhlblxuICAgICAgICogd2UgY2FuIHRha2UgdGhlIHZhbHVlIGZyb20gdGhhdCBpbi1wcm9ncmVzcyBleGVjdXRpb24uIE5vdGUgdGhpcyBtYXlcbiAgICAgICAqIHNvdW5kIGxpa2UgYW4gZWRnZSBjYXNlLCBidXQgbWF5IGJlIHZlcnkgY29tbW9uIGluIGNhc2VzIHdoZXJlIGFcbiAgICAgICAqIGxvYWRpbmcgZGVwZW5kZW5jeSByZXNvbHZlcyBmcm9tIGxvYWRpbmcgdG8gaGF2aW5nIGEgdmFsdWUgKHRodXNcbiAgICAgICAqIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZS1yZW5kZXIpLCBhbmQgUmVhY3QgcmUtcmVuZGVycyBiZWZvcmUgdGhlXG4gICAgICAgKiBjaGFpbmVkIC50aGVuKCkgZnVuY3Rpb25zIHJ1biwgdGh1cyBzdGFydGluZyBhIG5ldyBleGVjdXRpb24gYXMgdGhlXG4gICAgICAgKiBkZXAgaGFzIGNoYW5nZWQgdmFsdWUuIFdpdGhvdXQgdGhpcyBjaGVjayB3ZSB3aWxsIHJ1biB0aGUgc2VsZWN0b3JcbiAgICAgICAqIHR3aWNlIChvbmNlIGluIHRoZSBuZXcgZXhlY3V0aW9uIGFuZCBvbmNlIGFnYWluIGluIHRoaXMgLnRoZW4oKSwgc29cbiAgICAgICAqIHRoaXMgY2hlY2sgaXMgbmVjZXNzYXJ5IHRvIGtlZXAgdW5uZWNlc3NhcnkgcmUtZXhlY3V0aW9ucyB0byBhXG4gICAgICAgKiBtaW5pbXVtKS5cbiAgICAgICAqXG4gICAgICAgKiBBbHNvIG5vdGUgdGhpcyBjb2RlIGRvZXMgbm90IGNoZWNrIGFjcm9zcyBhbGwgZXhlY3V0aW9ucyB0aGF0IG1heSBiZVxuICAgICAgICogcnVubmluZy4gSXQgb25seSBvcHRpbWl6ZXMgZm9yIHRoZSBfbGF0ZXN0XyBleGVjdXRpb24gcGVyIHN0b3JlIGFzXG4gICAgICAgKiB3ZSBjdXJyZW50bHkgZG8gbm90IG1haW50YWluIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0aW9ucy5cbiAgICAgICAqIFRoaXMgbWVhbnMgaW4gc29tZSBjYXNlcyB3ZSBtYXkgcnVuIHNlbGVjdG9ycyBtb3JlIHRoYW4gc3RyaWN0bHlcbiAgICAgICAqIG5lY2Vzc2FyeSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBleGVjdXRpb25zIHJ1bm5pbmcgZm9yIHRoZSBzYW1lXG4gICAgICAgKiBzZWxlY3Rvci4gVGhpcyBtYXkgYmUgYSB2YWxpZCB0cmFkZW9mZiBhcyBjaGVja2luZyBmb3IgZGVwIGNoYW5nZXNcbiAgICAgICAqIGFjcm9zcyBhbGwgaW4tcHJvZ3Jlc3MgZXhlY3V0aW9ucyBtYXkgdGFrZSBsb25nZXIgdGhhbiBqdXN0XG4gICAgICAgKiByZS1ydW5uaW5nIHRoZSBzZWxlY3Rvci4gVGhpcyB3aWxsIGJlIGFwcC1kZXBlbmRlbnQsIGFuZCBtYXliZSBpbiB0aGVcbiAgICAgICAqIGZ1dHVyZSB3ZSBjYW4gbWFrZSB0aGUgYmVoYXZpb3IgY29uZmlndXJhYmxlLiBBbiBpZGVhbCBmaXggbWF5IGJlXG4gICAgICAgKiB0byBleHRlbmQgdGhlIHRyZWUgY2FjaGUgdG8gc3VwcG9ydCBjYWNoaW5nIGxvYWRpbmcgc3RhdGVzLlxuICAgICAgICovXG5cblxuICAgICAgaWYgKCFpc0xhdGVzdEV4ZWN1dGlvbihzdG9yZSwgZXhlY3V0aW9uSWQpKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbkluZm8gPSBnZXRFeGVjdXRpb25JbmZvT2ZJblByb2dyZXNzRXhlY3V0aW9uKHN0YXRlKTtcblxuICAgICAgICBpZiAoKGV4ZWN1dGlvbkluZm8gPT09IG51bGwgfHwgZXhlY3V0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhlY3V0aW9uSW5mby5sYXRlc3RMb2FkYWJsZS5zdGF0ZSkgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFJldHVybmluZyBwcm9taXNlIGhlcmUgd2l0aG91dCB3cmFwcGluZyBhcyB0aGUgd3JhcHBlciBsb2dpYyB3YXNcbiAgICAgICAgICAgKiBhbHJlYWR5IGRvbmUgdXBzdHJlYW0gd2hlbiB0aGlzIHByb21pc2Ugd2FzIGdlbmVyYXRlZC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICByZXR1cm4gZXhlY3V0aW9uSW5mby5sYXRlc3RMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZXRyeSB0aGUgc2VsZWN0b3IgZXZhbHVhdGlvbiBub3cgdGhhdCB0aGUgZGVwZW5kZW5jeSBoYXMgcmVzb2x2ZWRcblxuXG4gICAgICBjb25zdCBbbG9hZGFibGUsIGRlcFZhbHVlc10gPSBldmFsdWF0ZVNlbGVjdG9yR2V0dGVyKHN0b3JlLCBzdGF0ZSwgZXhlY3V0aW9uSWQpO1xuICAgICAgdXBkYXRlRXhlY3V0aW9uSW5mb0RlcFZhbHVlcyhzdG9yZSwgZXhlY3V0aW9uSWQsIGRlcFZhbHVlcyk7XG5cbiAgICAgIGlmIChsb2FkYWJsZS5zdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgIHJlc29sdmVBc3luYyhzdG9yZSwgc3RhdGUsIGV4ZWN1dGlvbklkLCBsb2FkYWJsZSwgZGVwVmFsdWVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxvYWRhYmxlLnN0YXRlID09PSAnaGFzRXJyb3InKSB7XG4gICAgICAgIHRocm93IGxvYWRhYmxlLmNvbnRlbnRzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG9hZGFibGUuY29udGVudHM7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgLy8gVGhlIHNlbGVjdG9yIHdhcyByZWxlYXNlZCBzaW5jZSB0aGUgcmVxdWVzdCBiZWdhbjsgaWdub3JlIHRoZSByZXNwb25zZS5cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENhbmNlbGVkKSB7XG4gICAgICAgIHRocm93IENBTkNFTEVEO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbGVjdG9ySXNMaXZlKCkpIHtcbiAgICAgICAgY2xlYXJFeGVjdXRpb25JbmZvKHN0b3JlKTtcbiAgICAgICAgdGhyb3cgQ0FOQ0VMRUQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvYWRhYmxlID0gbG9hZGFibGVXaXRoRXJyb3IkMShlcnJvcik7XG4gICAgICByZXNvbHZlQXN5bmMoc3RvcmUsIHN0YXRlLCBleGVjdXRpb25JZCwgbG9hZGFibGUsIGV4aXN0aW5nRGVwcyk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERlcHNJblN0b3JlKHN0b3JlLCBzdGF0ZSwgZGVwcywgZXhlY3V0aW9uSWQpIHtcbiAgICB2YXIgX3N0b3JlJGdldFN0YXRlLCBfc3RvcmUkZ2V0U3RhdGUkY3VycmUsIF9zdG9yZSRnZXRTdGF0ZTIsIF9zdG9yZSRnZXRTdGF0ZTIkbmV4dDtcblxuICAgIGlmIChpc0xhdGVzdEV4ZWN1dGlvbihzdG9yZSwgZXhlY3V0aW9uSWQpIHx8IHN0YXRlLnZlcnNpb24gPT09ICgoX3N0b3JlJGdldFN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKSkgPT09IG51bGwgfHwgX3N0b3JlJGdldFN0YXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3N0b3JlJGdldFN0YXRlJGN1cnJlID0gX3N0b3JlJGdldFN0YXRlLmN1cnJlbnRUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmUkZ2V0U3RhdGUkY3VycmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zdG9yZSRnZXRTdGF0ZSRjdXJyZS52ZXJzaW9uKSB8fCBzdGF0ZS52ZXJzaW9uID09PSAoKF9zdG9yZSRnZXRTdGF0ZTIgPSBzdG9yZS5nZXRTdGF0ZSgpKSA9PT0gbnVsbCB8fCBfc3RvcmUkZ2V0U3RhdGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3N0b3JlJGdldFN0YXRlMiRuZXh0ID0gX3N0b3JlJGdldFN0YXRlMi5uZXh0VHJlZSkgPT09IG51bGwgfHwgX3N0b3JlJGdldFN0YXRlMiRuZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RvcmUkZ2V0U3RhdGUyJG5leHQudmVyc2lvbikpIHtcbiAgICAgIHZhciBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQsIF9zdG9yZSRnZXRTdGF0ZTMsIF9zdG9yZSRnZXRTdGF0ZTMkbmV4dDtcblxuICAgICAgc2F2ZURlcGVuZGVuY3lNYXBUb1N0b3JlJDEobmV3IE1hcChbW2tleSwgZGVwc11dKSwgc3RvcmUsIChfc3RvcmUkZ2V0U3RhdGUkbmV4dFQgPSAoX3N0b3JlJGdldFN0YXRlMyA9IHN0b3JlLmdldFN0YXRlKCkpID09PSBudWxsIHx8IF9zdG9yZSRnZXRTdGF0ZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc3RvcmUkZ2V0U3RhdGUzJG5leHQgPSBfc3RvcmUkZ2V0U3RhdGUzLm5leHRUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmUkZ2V0U3RhdGUzJG5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zdG9yZSRnZXRTdGF0ZTMkbmV4dC52ZXJzaW9uKSAhPT0gbnVsbCAmJiBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQgIT09IHZvaWQgMCA/IF9zdG9yZSRnZXRTdGF0ZSRuZXh0VCA6IHN0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWUudmVyc2lvbik7XG4gICAgICBkZXBzLmZvckVhY2gobm9kZUtleSA9PiBkaXNjb3ZlcmVkRGVwZW5kZW5jeU5vZGVLZXlzLmFkZChub2RlS2V5KSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0TmV3RGVwSW5TdG9yZShzdG9yZSwgc3RhdGUsIGRlcHMsIG5ld0RlcEtleSwgZXhlY3V0aW9uSWQpIHtcbiAgICBkZXBzLmFkZChuZXdEZXBLZXkpO1xuICAgIHNldERlcHNJblN0b3JlKHN0b3JlLCBzdGF0ZSwgZGVwcywgZXhlY3V0aW9uSWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXZhbHVhdGVTZWxlY3RvckdldHRlcihzdG9yZSwgc3RhdGUsIGV4ZWN1dGlvbklkKSB7XG4gICAgY29uc3QgZW5kUGVyZkJsb2NrID0gc3RhcnRQZXJmQmxvY2skMShrZXkpOyAvLyBUT0RPIFQ2Mzk2NTg2NjogdXNlIGV4ZWN1dGlvbiBJRCBoZXJlXG5cbiAgICBsZXQgZ2F0ZUNhbGxiYWNrID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZpbmlzaEV2YWx1YXRpb24gPSAoKSA9PiB7XG4gICAgICBlbmRQZXJmQmxvY2soKTtcbiAgICAgIGdhdGVDYWxsYmFjayA9IGZhbHNlO1xuICAgIH07XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCByZXN1bHRJc0Vycm9yID0gZmFsc2U7XG4gICAgbGV0IGxvYWRhYmxlO1xuICAgIGNvbnN0IGxvYWRpbmdEZXBzU3RhdGUgPSB7XG4gICAgICBsb2FkaW5nRGVwS2V5OiBudWxsLFxuICAgICAgbG9hZGluZ0RlcFByb21pc2U6IG51bGxcbiAgICB9O1xuICAgIGNvbnN0IGRlcFZhbHVlcyA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBTdGFydGluZyBhIGZyZXNoIHNldCBvZiBkZXBzIHRoYXQgd2UnbGwgYmUgdXNpbmcgdG8gdXBkYXRlIHN0YXRlLiBXZSdyZVxuICAgICAqIHN0YXJ0aW5nIGEgbmV3IHNldCB2ZXJzdXMgYWRkaW5nIGl0IGluIGV4aXN0aW5nIHN0YXRlIGRlcHMgYmVjYXVzZVxuICAgICAqIHRoZSB2ZXJzaW9uIG9mIHN0YXRlIHRoYXQgd2UgdXBkYXRlIGRlcHMgZm9yIG1heSBiZSBhIG1vcmUgcmVjZW50IHZlcnNpb25cbiAgICAgKiB0aGFuIHRoZSB2ZXJzaW9uIHRoZSBzZWxlY3RvciB3YXMgY2FsbGVkIHdpdGguIFRoaXMgaXMgYmVjYXVzZSB0aGUgbGF0ZXN0XG4gICAgICogZXhlY3V0aW9uIHdpbGwgdXBkYXRlIHRoZSBkZXBzIG9mIHRoZSBjdXJyZW50L2xhdGVzdCB2ZXJzaW9uIG9mIHN0YXRlIChcbiAgICAgKiB0aGlzIGlzIHNhZmUgdG8gZG8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IHRoZSBzZWxlY3RvciBpcyB0aGUgbGF0ZXN0XG4gICAgICogZXhlY3V0aW9uIG1lYW5zIHRoZSBkZXBzIHdlIGRpc2NvdmVyIGJlbG93IGFyZSBvdXIgYmVzdCBndWVzcyBhdCB0aGVcbiAgICAgKiBkZXBzIGZvciB0aGUgY3VycmVudC9sYXRlc3Qgc3RhdGUgaW4gdGhlIHN0b3JlKVxuICAgICAqL1xuXG4gICAgY29uc3QgZGVwcyA9IG5ldyBTZXQoKTtcbiAgICBzZXREZXBzSW5TdG9yZShzdG9yZSwgc3RhdGUsIGRlcHMsIGV4ZWN1dGlvbklkKTtcblxuICAgIGZ1bmN0aW9uIGdldFJlY29pbFZhbHVlKGRlcCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBrZXk6IGRlcEtleVxuICAgICAgfSA9IGRlcDtcbiAgICAgIHNldE5ld0RlcEluU3RvcmUoc3RvcmUsIHN0YXRlLCBkZXBzLCBkZXBLZXksIGV4ZWN1dGlvbklkKTtcbiAgICAgIGNvbnN0IGRlcExvYWRhYmxlID0gZ2V0Q2FjaGVkTm9kZUxvYWRhYmxlKHN0b3JlLCBzdGF0ZSwgZGVwS2V5KTtcbiAgICAgIGRlcFZhbHVlcy5zZXQoZGVwS2V5LCBkZXBMb2FkYWJsZSk7XG5cbiAgICAgIHN3aXRjaCAoZGVwTG9hZGFibGUuc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnaGFzVmFsdWUnOlxuICAgICAgICAgIHJldHVybiBkZXBMb2FkYWJsZS5jb250ZW50cztcblxuICAgICAgICBjYXNlICdoYXNFcnJvcic6XG4gICAgICAgICAgdGhyb3cgZGVwTG9hZGFibGUuY29udGVudHM7XG5cbiAgICAgICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICAgICAgbG9hZGluZ0RlcHNTdGF0ZS5sb2FkaW5nRGVwS2V5ID0gZGVwS2V5O1xuICAgICAgICAgIGxvYWRpbmdEZXBzU3RhdGUubG9hZGluZ0RlcFByb21pc2UgPSBkZXBMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgICB0aHJvdyBkZXBMb2FkYWJsZS5jb250ZW50cztcbiAgICAgIH1cblxuICAgICAgdGhyb3cgUmVjb2lsX2VycignSW52YWxpZCBMb2FkYWJsZSBzdGF0ZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGdldENhbGxiYWNrID0gZm4gPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChnYXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICB0aHJvdyBSZWNvaWxfZXJyKCdDYWxsYmFja3MgZnJvbSBnZXRDYWxsYmFjaygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhc3luY2hyb25vdXNseSBhZnRlciB0aGUgc2VsZWN0b3IgaXMgZXZhbHV0YXRlZC4gIEl0IGNhbiBiZSB1c2VkIGZvciBzZWxlY3RvcnMgdG8gcmV0dXJuIG9iamVjdHMgd2l0aCBjYWxsYmFja3MgdGhhdCBjYW4gd29yayB3aXRoIFJlY29pbCBzdGF0ZSB3aXRob3V0IGEgc3Vic2NyaXB0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgIShyZWNvaWxWYWx1ZSAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJlY29pbF9pbnZhcmlhbnQoZmFsc2UsICdSZWNvaWwgVmFsdWUgY2FuIG5ldmVyIGJlIG51bGwnKSA6IFJlY29pbF9pbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgICByZXR1cm4gcmVjb2lsQ2FsbGJhY2skMShzdG9yZSwgZm4sIGFyZ3MsIHtcbiAgICAgICAgICBub2RlOiByZWNvaWxWYWx1ZVxuICAgICAgICB9IC8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGdldCh7XG4gICAgICAgIGdldDogZ2V0UmVjb2lsVmFsdWUsXG4gICAgICAgIGdldENhbGxiYWNrXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdCA9IGlzUmVjb2lsVmFsdWUkMyhyZXN1bHQpID8gZ2V0UmVjb2lsVmFsdWUocmVzdWx0KSA6IHJlc3VsdDtcblxuICAgICAgaWYgKFJlY29pbF9pc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICByZXN1bHQgPSB3cmFwUGVuZGluZ1Byb21pc2Uoc3RvcmUsIHJlc3VsdCwgc3RhdGUsIGRlcFZhbHVlcywgZXhlY3V0aW9uSWQsIGxvYWRpbmdEZXBzU3RhdGUpLmZpbmFsbHkoZmluaXNoRXZhbHVhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5pc2hFdmFsdWF0aW9uKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3JPckRlcFByb21pc2UpIHtcbiAgICAgIHJlc3VsdCA9IGVycm9yT3JEZXBQcm9taXNlO1xuXG4gICAgICBpZiAoUmVjb2lsX2lzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIHJlc3VsdCA9IHdyYXBQZW5kaW5nRGVwZW5kZW5jeVByb21pc2Uoc3RvcmUsIHJlc3VsdCwgc3RhdGUsIGRlcFZhbHVlcywgZXhlY3V0aW9uSWQsIGxvYWRpbmdEZXBzU3RhdGUpLmZpbmFsbHkoZmluaXNoRXZhbHVhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRJc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgZmluaXNoRXZhbHVhdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRJc0Vycm9yKSB7XG4gICAgICBsb2FkYWJsZSA9IGxvYWRhYmxlV2l0aEVycm9yJDEocmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKFJlY29pbF9pc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgbG9hZGFibGUgPSBsb2FkYWJsZVdpdGhQcm9taXNlJDEocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZGFibGUgPSBsb2FkYWJsZVdpdGhWYWx1ZSQyKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsb2FkYWJsZSwgZGVwVmFsdWVzXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZhbEZyb21DYWNoZUFuZFVwZGF0ZWREb3duc3RyZWFtRGVwcyhzdG9yZSwgc3RhdGUpIHtcbiAgICBjb25zdCBkZXBzQWZ0ZXJDYWNoZURvbmUgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZXhlY3V0aW9uSW5mbyA9IGdldEV4ZWN1dGlvbkluZm8oc3RvcmUpO1xuICAgIGxldCBjYWNoZWRWYWw7XG5cbiAgICB0cnkge1xuICAgICAgY2FjaGVkVmFsID0gY2FjaGUuZ2V0KG5vZGVLZXkgPT4ge1xuICAgICAgICAhKHR5cGVvZiBub2RlS2V5ID09PSAnc3RyaW5nJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSZWNvaWxfaW52YXJpYW50KGZhbHNlLCAnQ2FjaGUgbm9kZUtleSBpcyB0eXBlIHN0cmluZycpIDogUmVjb2lsX2ludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGxvYWRhYmxlID0gZ2V0Q2FjaGVkTm9kZUxvYWRhYmxlKHN0b3JlLCBzdGF0ZSwgbm9kZUtleSk7XG4gICAgICAgIHJldHVybiBsb2FkYWJsZS5jb250ZW50cztcbiAgICAgIH0sIHtcbiAgICAgICAgb25Ob2RlVmlzaXQ6IG5vZGUgPT4ge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdicmFuY2gnICYmIG5vZGUubm9kZUtleSAhPT0ga2V5KSB7XG4gICAgICAgICAgICBkZXBzQWZ0ZXJDYWNoZURvbmUuYWRkKG5vZGUubm9kZUtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgUmVjb2lsX2VycihgUHJvYmxlbSB3aXRoIGNhY2hlIGxvb2t1cCBmb3Igc2VsZWN0b3IgXCIke2tleX1cIjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgc3RvcmUgY29udGFpbnMgY29ycmVjdCBkZXBlbmRlbmNpZXMgaWYgd2UgaGl0IHRoZSBjYWNoZSBzbyB0aGF0XG4gICAgICogdGhlIHN0b3JlIGRlcHMgYW5kIGNhY2hlIGFyZSBpbiBzeW5jIGZvciBhIGdpdmVuIHN0YXRlLiBUaGlzIGlzIGltcG9ydGFudFxuICAgICAqIGJlY2F1c2Ugc3RvcmUgZGVwcyBhcmUgbm9ybWFsbHkgdXBkYXRlZCB3aGVuIG5ldyBleGVjdXRpb25zIGFyZSBjcmVhdGVkLFxuICAgICAqIGJ1dCBjYWNoZSBoaXRzIGRvbid0IHRyaWdnZXIgbmV3IGV4ZWN1dGlvbnMgYnV0IHRoZXkgc3RpbGwgX21heV8gc2lnbmlmaXlcbiAgICAgKiBhIGNoYW5nZSBpbiBkZXBzIGluIHRoZSBzdG9yZSBpZiB0aGUgc3RvcmUgZGVwcyBmb3IgdGhpcyBzdGF0ZSBhcmUgZW1wdHlcbiAgICAgKiBvciBzdGFsZS5cbiAgICAgKi9cblxuXG4gICAgaWYgKGNhY2hlZFZhbCkge1xuICAgICAgc2V0RGVwc0luU3RvcmUoc3RvcmUsIHN0YXRlLCBkZXBzQWZ0ZXJDYWNoZURvbmUsIGV4ZWN1dGlvbkluZm8gPT09IG51bGwgfHwgZXhlY3V0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhlY3V0aW9uSW5mby5sYXRlc3RFeGVjdXRpb25JZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlZFZhbDtcbiAgfVxuICAvKipcbiAgICogRklYTUU6IGRlcCBrZXlzIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgc3RhdGUgb2YgdGhlIGxvYWRhYmxlIHRvXG4gICAqIHByZXZlbnQgdGhlIGVkZ2UgY2FzZSB3aGVyZSBhIGxvYWRhYmxlIHdpdGggYW4gZXJyb3IgYW5kIGEgbG9hZGFibGUgd2l0aFxuICAgKiBhbiBlcnJvciBhcyBhIHZhbHVlIGFyZSB0cmVhdGVkIGFzIHRoZSBzYW1lIHRoaW5nIGluY29ycmVjdGx5LiBGb3IgZXhhbXBsZVxuICAgKiB0aGVzZSB0d28gc2hvdWxkIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHk6XG4gICAqXG4gICAqIHNlbGVjdG9yKHtrZXk6ICcnLCBnZXQ6ICgpID0+IG5ldyBFcnJvcignaGknKX0pO1xuICAgKiBzZWxlY3Rvcih7a2V5OiAnJywgZ2V0ICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoJ2hpJyl9fSk7XG4gICAqXG4gICAqIFdpdGggY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGV5IGFyZSB0cmVhdGVkIHRoZSBzYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZGVwVmFsdWVzVG9EZXBSb3V0ZShkZXBWYWx1ZXMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShkZXBWYWx1ZXMuZW50cmllcygpKS5tYXAoKFtkZXBLZXksIHZhbExvYWRhYmxlXSkgPT4gW2RlcEtleSwgdmFsTG9hZGFibGUuY29udGVudHNdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZhbEZyb21SdW5uaW5nTmV3RXhlY3V0aW9uQW5kVXBkYXRlZERlcHMoc3RvcmUsIHN0YXRlKSB7XG4gICAgY29uc3QgbmV3RXhlY3V0aW9uSWQgPSBnZXROZXdFeGVjdXRpb25JZCgpO1xuICAgIGNvbnN0IFtsb2FkYWJsZSwgbmV3RGVwVmFsdWVzXSA9IGV2YWx1YXRlU2VsZWN0b3JHZXR0ZXIoc3RvcmUsIHN0YXRlLCBuZXdFeGVjdXRpb25JZCk7XG4gICAgLyoqXG4gICAgICogQ29uZGl0aW9uYWxseSB1cGRhdGVzIHRoZSBjYWNoZSB3aXRoIGEgZ2l2ZW4gbG9hZGFibGUuXG4gICAgICpcbiAgICAgKiBXZSBvbmx5IGNhY2hlIGxvYWRhYmxlcyB0aGF0IGFyZSBub3QgbG9hZGluZyBiZWNhdXNlIG91ciBjYWNoZSBrZXlzIGFyZVxuICAgICAqIGJhc2VkIG9uIGRlcCB2YWx1ZXMsIHdoaWNoIGFyZSBpbiBhbiB1bmZpbmlzaGVkIHN0YXRlIGZvciBsb2FkYWJsZXMgdGhhdFxuICAgICAqIGhhdmUgYSAnbG9hZGluZycgc3RhdGUgKG5ldyBkZXBzIG1heSBiZSBkaXNjb3ZlcmVkIHdoaWxlIHRoZSBzZWxlY3RvclxuICAgICAqIHJ1bnMgaXRzIGFzeW5jIGNvZGUpLiBXZSBuZXZlciB3YW50IHRvIGNhY2hlIHBhcnRpYWwgZGVwZW5kZW5jaWVzIGIvYyBpdFxuICAgICAqIGNvdWxkIGxlYWQgdG8gZXJyb3JzLCBzdWNoIGFzIHByZW1hdHVyZWx5IHJldHVybmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIGFcbiAgICAgKiBwYXJ0aWFsIGxpc3Qgb2YgZGVwcy0tIHdlIG5lZWQgdGhlIGZ1bGwgbGlzdCBvZiBkZXBzIHRvIGVuc3VyZSB0aGF0IHdlXG4gICAgICogYXJlIHJldHVybmluZyB0aGUgY29ycmVjdCByZXN1bHQgZnJvbSBjYWNoZS5cbiAgICAgKi9cblxuICAgIGlmIChsb2FkYWJsZS5zdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICBzZXRFeGVjdXRpb25JbmZvKHN0b3JlLCBuZXdFeGVjdXRpb25JZCwgbG9hZGFibGUsIG5ld0RlcFZhbHVlcywgc3RhdGUpO1xuICAgICAgbWFya1N0b3JlV2FpdGluZ0ZvclJlc29sdmVkQXN5bmMoc3RvcmUsIG5ld0V4ZWN1dGlvbklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJFeGVjdXRpb25JbmZvKHN0b3JlKTtcbiAgICAgIHNldENhY2hlKHN0YXRlLCBsb2FkYWJsZSwgbmV3RGVwVmFsdWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZGFibGU7XG4gIH1cbiAgLyoqXG4gICAqIEdpdmVuIGEgdHJlZSBzdGF0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBcInNlbGVjdG9yIHJlc3VsdFwiLCB3aGljaCBpc1xuICAgKiBkZWZpbmVkIGFzIGEgc2l6ZS0yIHR1cGxlIG9mIFtEZXBlbmRlbmN5TWFwLCBMb2FkYWJsZTxUPl0uXG4gICAqXG4gICAqIFRoZSBzZWxlY3RvcidzIGdldCgpIGZ1bmN0aW9uIHdpbGwgb25seSBiZSByZS1ldmFsdWF0ZWQgaWYgX2JvdGhfIG9mIHRoZVxuICAgKiBmb2xsb3dpbmcgc3RhdGVtZW50cyBhcmUgdHJ1ZTpcbiAgICpcbiAgICogMS4gVGhlIGN1cnJlbnQgZGVwIHZhbHVlcyBmcm9tIHRoZSBnaXZlbiBzdGF0ZSBwcm9kdWNlZCBhIGNhY2hlIGtleSB0aGF0XG4gICAqICAgIHdhcyBub3QgZm91bmQgaW4gdGhlIGNhY2hlLlxuICAgKiAyLiBUaGVyZSBpcyBubyBjdXJyZW50bHkgcnVubmluZyBhc3luYyBleGVjdXRpb24gT1IgdGhlcmUgaXMgYW5cbiAgICogICAgYXN5bmMgZXhlY3V0aW9uIHRoYXQgaXMgcnVubmluZywgYnV0IGFmdGVyIGNvbXBhcmluZyB0aGUgZGVwIHZhbHVlcyBpblxuICAgKiAgICB0aGUgZ2l2ZW4gc3RhdGUgd2l0aCB0aGUgZGVwIHZhbHVlcyB0aGF0IHRoZSBleGVjdXRpb24gaGFzIGRpc2NvdmVyZWQgc29cbiAgICogICAgZmFyIHdlIGZpbmQgdGhhdCBhdCBsZWFzdCBvbmUgZGVwIHZhbHVlIGhhcyBjaGFuZ2VkLCBpbiB3aGljaCBjYXNlIHdlXG4gICAqICAgIHN0YXJ0IGEgbmV3IGV4ZWN1dGlvbiAodGhlIHByZXZpb3VzbHkgcnVubmluZyBleGVjdXRpb24gd2lsbCBjb250aW51ZSB0b1xuICAgKiAgICBydW4gdG8gY29tcGxldGlvbiwgYnV0IG9ubHkgdGhlIG5ldyBleGVjdXRpb24gd2lsbCBiZSBkZWVtZWQgdGhlXG4gICAqICAgICdsYXRlc3QnIGV4ZWN1dGlvbiwgbWVhbmluZyBpdCB3aWxsIGJlIHRoZSBvbmx5IGV4ZWN1dGlvbiB0aGF0IHdpbGxcbiAgICogICAgdXBkYXRlIGdsb2JhbCBzdGF0ZSB3aGVuIGl0IGlzIGZpbmlzaGVkLiBBbnkgbm9uLWxhdGVzdCBleGVjdXRpb25zIHdpbGxcbiAgICogICAgcnVuIHRvIGNvbXBsZXRpb24gYW5kIHVwZGF0ZSB0aGUgc2VsZWN0b3IgY2FjaGUgYnV0IG5vdCBnbG9iYWwgc3RhdGUpLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yVmFsQW5kVXBkYXRlZERlcHMoc3RvcmUsIHN0YXRlKSB7XG4gICAgY29uc3QgY2FjaGVkVmFsID0gZ2V0VmFsRnJvbUNhY2hlQW5kVXBkYXRlZERvd25zdHJlYW1EZXBzKHN0b3JlLCBzdGF0ZSk7XG5cbiAgICBpZiAoY2FjaGVkVmFsICE9IG51bGwpIHtcbiAgICAgIGNsZWFyRXhlY3V0aW9uSW5mbyhzdG9yZSk7XG4gICAgICByZXR1cm4gY2FjaGVkVmFsO1xuICAgIH1cblxuICAgIGNvbnN0IGluUHJvZ3Jlc3NFeGVjdXRpb25JbmZvID0gZ2V0RXhlY3V0aW9uSW5mb09mSW5Qcm9ncmVzc0V4ZWN1dGlvbihzdGF0ZSk7IC8vIEZJWE1FOiB0aGlzIHdvbid0IHdvcmsgd2l0aCBjdXN0b20gY2FjaGluZyBiL2MgaXQgdXNlcyBzZXBhcmF0ZSBjYWNoZVxuXG4gICAgaWYgKGluUHJvZ3Jlc3NFeGVjdXRpb25JbmZvICE9IG51bGwpIHtcbiAgICAgIHZhciBfaW5Qcm9ncmVzc0V4ZWN1dGlvbkk7XG5cbiAgICAgIGlmICgoKF9pblByb2dyZXNzRXhlY3V0aW9uSSA9IGluUHJvZ3Jlc3NFeGVjdXRpb25JbmZvLmxhdGVzdExvYWRhYmxlKSA9PT0gbnVsbCB8fCBfaW5Qcm9ncmVzc0V4ZWN1dGlvbkkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9pblByb2dyZXNzRXhlY3V0aW9uSS5zdGF0ZSkgPT09ICdsb2FkaW5nJykge1xuICAgICAgICBtYXJrU3RvcmVXYWl0aW5nRm9yUmVzb2x2ZWRBc3luYyhzdG9yZSwgUmVjb2lsX251bGx0aHJvd3MoaW5Qcm9ncmVzc0V4ZWN1dGlvbkluZm8ubGF0ZXN0RXhlY3V0aW9uSWQpKTtcbiAgICAgIH0gLy8gRklYTUU6IGNoZWNrIGFmdGVyIHRoZSBmYWN0IHRvIHNlZSBpZiB3ZSBtYWRlIHRoZSByaWdodCBjaG9pY2UgYnkgd2FpdGluZ1xuXG5cbiAgICAgIHJldHVybiBSZWNvaWxfbnVsbHRocm93cyhpblByb2dyZXNzRXhlY3V0aW9uSW5mby5sYXRlc3RMb2FkYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFZhbEZyb21SdW5uaW5nTmV3RXhlY3V0aW9uQW5kVXBkYXRlZERlcHMoc3RvcmUsIHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogU2VhcmNoZXMgZXhlY3V0aW9uIGluZm8gYWNyb3NzIGFsbCBzdG9yZXMgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGluLXByb2dyZXNzXG4gICAqIGV4ZWN1dGlvbiB3aG9zZSBkZXBlbmRlbmN5IHZhbHVlcyBtYXRjaCB0aGUgdmFsdWVzIG9mIHRoZSByZXF1ZXN0aW5nIHN0b3JlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldEV4ZWN1dGlvbkluZm9PZkluUHJvZ3Jlc3NFeGVjdXRpb24oc3RhdGUpIHtcbiAgICB2YXIgX0FycmF5JGZyb20kZmluZDtcblxuICAgIGNvbnN0IFssIGV4ZWN1dGlvbkluZm9dID0gKF9BcnJheSRmcm9tJGZpbmQgPSBBcnJheS5mcm9tKGV4ZWN1dGlvbkluZm9NYXAuZW50cmllcygpKS5maW5kKChbc3RvcmUsIGV4ZWNJbmZvXSkgPT4ge1xuICAgICAgcmV0dXJuIGV4ZWNJbmZvLmxhdGVzdExvYWRhYmxlICE9IG51bGwgJiYgZXhlY0luZm8ubGF0ZXN0RXhlY3V0aW9uSWQgIT0gbnVsbCAmJiAhaGF2ZUFzeW5jRGVwc0NoYW5nZWQoc3RvcmUsIHN0YXRlKTtcbiAgICB9KSkgIT09IG51bGwgJiYgX0FycmF5JGZyb20kZmluZCAhPT0gdm9pZCAwID8gX0FycmF5JGZyb20kZmluZCA6IFtdO1xuICAgIHJldHVybiBleGVjdXRpb25JbmZvO1xuICB9XG5cbiAgY29uc3QgbWFwT2ZDaGVja2VkVmVyc2lvbnMgPSBuZXcgTWFwKCk7XG5cbiAgZnVuY3Rpb24gaGF2ZUFzeW5jRGVwc0NoYW5nZWQoc3RvcmUsIHN0YXRlKSB7XG4gICAgdmFyIF9leGVjdXRpb25JbmZvJGRlcFZhbCwgX21hcE9mQ2hlY2tlZFZlcnNpb25zO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uSW5mbyA9IGdldEV4ZWN1dGlvbkluZm8oc3RvcmUpO1xuICAgIGNvbnN0IG9sZERlcFZhbHVlcyA9IChfZXhlY3V0aW9uSW5mbyRkZXBWYWwgPSBleGVjdXRpb25JbmZvID09PSBudWxsIHx8IGV4ZWN1dGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4ZWN1dGlvbkluZm8uZGVwVmFsdWVzRGlzY292ZXJlZFNvRmFyRHVyaW5nQXN5bmNXb3JrKSAhPT0gbnVsbCAmJiBfZXhlY3V0aW9uSW5mbyRkZXBWYWwgIT09IHZvaWQgMCA/IF9leGVjdXRpb25JbmZvJGRlcFZhbCA6IG5ldyBNYXAoKTtcbiAgICBjb25zdCBjYWNoZWREZXBWYWx1ZXNDaGVja2VkRm9yVGhpc1ZlcnNpb24gPSBBcnJheSgoKF9tYXBPZkNoZWNrZWRWZXJzaW9ucyA9IG1hcE9mQ2hlY2tlZFZlcnNpb25zLmdldChzdGF0ZS52ZXJzaW9uKSkgIT09IG51bGwgJiYgX21hcE9mQ2hlY2tlZFZlcnNpb25zICE9PSB2b2lkIDAgPyBfbWFwT2ZDaGVja2VkVmVyc2lvbnMgOiBuZXcgTWFwKCkpLmVudHJpZXMoKSk7XG4gICAgY29uc3QgaXNDYWNoZWRWZXJzaW9uU2FtZSA9IG1hcE9mQ2hlY2tlZFZlcnNpb25zLmhhcyhzdGF0ZS52ZXJzaW9uKSAmJiBjYWNoZWREZXBWYWx1ZXNDaGVja2VkRm9yVGhpc1ZlcnNpb24ubGVuZ3RoID09PSBvbGREZXBWYWx1ZXMuc2l6ZSAmJiBjYWNoZWREZXBWYWx1ZXNDaGVja2VkRm9yVGhpc1ZlcnNpb24uZXZlcnkoKFtub2RlS2V5LCBub2RlVmFsXSkgPT4ge1xuICAgICAgcmV0dXJuIG9sZERlcFZhbHVlcy5nZXQobm9kZUtleSkgPT09IG5vZGVWYWw7XG4gICAgfSk7XG5cbiAgICBpZiAob2xkRGVwVmFsdWVzID09IG51bGwgfHwgc3RhdGUudmVyc2lvbiA9PT0gKGV4ZWN1dGlvbkluZm8gPT09IG51bGwgfHwgZXhlY3V0aW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhlY3V0aW9uSW5mby5zdGF0ZVZlcnNpb24pIHx8IGlzQ2FjaGVkVmVyc2lvblNhbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBtYXBPZkNoZWNrZWRWZXJzaW9ucy5zZXQoc3RhdGUudmVyc2lvbiwgbmV3IE1hcChvbGREZXBWYWx1ZXMpKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvbGREZXBWYWx1ZXMpLnNvbWUoKFtub2RlS2V5LCBvbGRWYWxdKSA9PiB7XG4gICAgICBjb25zdCBsb2FkYWJsZSA9IGdldENhY2hlZE5vZGVMb2FkYWJsZShzdG9yZSwgc3RhdGUsIG5vZGVLZXkpO1xuICAgICAgcmV0dXJuIGxvYWRhYmxlLmNvbnRlbnRzICE9PSBvbGRWYWwuY29udGVudHM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFeGVjdXRpb25JbmZvKHN0b3JlKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGlvbkluZm9NYXAuZ2V0KHN0b3JlKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0aGUgc2VsZWN0b3IncyBleGVjdXRpb24gaW5mbyB3aGVuIHRoZSBzZWxlY3RvclxuICAgKiBoYXMgZWl0aGVyIGZpbmlzaGVkIHJ1bm5pbmcgYW4gZXhlY3V0aW9uIG9yIGhhcyBzdGFydGVkIGEgbmV3IGV4ZWN1dGlvbi4gSWZcbiAgICogdGhlIGdpdmVuIGxvYWRhYmxlIGlzIGluIGEgJ2xvYWRpbmcnIHN0YXRlLCB0aGUgaW50ZW50aW9uIGlzIHRoYXQgYSBuZXdcbiAgICogZXhlY3V0aW9uIGhhcyBzdGFydGVkLiBPdGhlcndpc2UsIHRoZSBpbnRlbnRpb24gaXMgdGhhdCBhbiBleGVjdXRpb24gaGFzXG4gICAqIGp1c3QgZmluaXNoZWQuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gc2V0RXhlY3V0aW9uSW5mbyhzdG9yZSwgbmV3RXhlY3V0aW9uSWQsIGxvYWRhYmxlLCBkZXBWYWx1ZXMsIHN0YXRlKSB7XG4gICAgZXhlY3V0aW9uSW5mb01hcC5zZXQoc3RvcmUsIHtcbiAgICAgIGRlcFZhbHVlc0Rpc2NvdmVyZWRTb0ZhckR1cmluZ0FzeW5jV29yazogZGVwVmFsdWVzLFxuICAgICAgbGF0ZXN0RXhlY3V0aW9uSWQ6IG5ld0V4ZWN1dGlvbklkLFxuICAgICAgbGF0ZXN0TG9hZGFibGU6IGxvYWRhYmxlLFxuICAgICAgc3RhdGVWZXJzaW9uOiBzdGF0ZS52ZXJzaW9uXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFeGVjdXRpb25JbmZvRGVwVmFsdWVzKHN0b3JlLCBleGVjdXRpb25JZCwgZGVwVmFsdWVzKSB7XG4gICAgaWYgKGlzTGF0ZXN0RXhlY3V0aW9uKHN0b3JlLCBleGVjdXRpb25JZCkpIHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbkluZm8gPSBnZXRFeGVjdXRpb25JbmZvKHN0b3JlKTtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkluZm8gIT0gbnVsbCkge1xuICAgICAgICBleGVjdXRpb25JbmZvLmRlcFZhbHVlc0Rpc2NvdmVyZWRTb0ZhckR1cmluZ0FzeW5jV29yayA9IGRlcFZhbHVlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckV4ZWN1dGlvbkluZm8oc3RvcmUpIHtcbiAgICBleGVjdXRpb25JbmZvTWFwLmRlbGV0ZShzdG9yZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0xhdGVzdEV4ZWN1dGlvbihzdG9yZSwgZXhlY3V0aW9uSWQpIHtcbiAgICB2YXIgX2dldEV4ZWN1dGlvbkluZm87XG5cbiAgICByZXR1cm4gZXhlY3V0aW9uSWQgPT09ICgoX2dldEV4ZWN1dGlvbkluZm8gPSBnZXRFeGVjdXRpb25JbmZvKHN0b3JlKSkgPT09IG51bGwgfHwgX2dldEV4ZWN1dGlvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nZXRFeGVjdXRpb25JbmZvLmxhdGVzdEV4ZWN1dGlvbklkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldENhY2hlKHN0YXRlLCBsb2FkYWJsZSwgZGVwVmFsdWVzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKGxvYWRhYmxlLnN0YXRlICE9PSAnbG9hZGluZycgJiYgQm9vbGVhbihvcHRpb25zLmRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgUmVjb2lsX2RlZXBGcmVlemVWYWx1ZShsb2FkYWJsZS5jb250ZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUuYXRvbVZhbHVlcy5zZXQoa2V5LCBsb2FkYWJsZSk7XG5cbiAgICB0cnkge1xuICAgICAgY2FjaGUuc2V0KGRlcFZhbHVlc1RvRGVwUm91dGUoZGVwVmFsdWVzKSwgbG9hZGFibGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBSZWNvaWxfZXJyKGBQcm9ibGVtIHdpdGggc2V0dGluZyBjYWNoZSBmb3Igc2VsZWN0b3IgXCIke2tleX1cIjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGVjdENpcmN1bGFyRGVwZW5kZW5jaWVzKGZuKSB7XG4gICAgaWYgKGRlcGVuZGVuY3lTdGFjay5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFJlY29pbCBzZWxlY3RvciBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jaWVzOiAke2RlcGVuZGVuY3lTdGFjay5zbGljZShkZXBlbmRlbmN5U3RhY2suaW5kZXhPZihrZXkpKS5qb2luKCcgXFx1MjE5MiAnKX1gO1xuICAgICAgcmV0dXJuIGxvYWRhYmxlV2l0aEVycm9yJDEoUmVjb2lsX2VycihtZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgZGVwZW5kZW5jeVN0YWNrLnB1c2goa2V5KTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVwZW5kZW5jeVN0YWNrLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yUGVlayhzdG9yZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gY2FjaGUuZ2V0KG5vZGVLZXkgPT4ge1xuICAgICAgdmFyIF9wZWVrTm9kZUxvYWRhYmxlO1xuXG4gICAgICAhKHR5cGVvZiBub2RlS2V5ID09PSAnc3RyaW5nJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSZWNvaWxfaW52YXJpYW50KGZhbHNlLCAnQ2FjaGUgbm9kZUtleSBpcyB0eXBlIHN0cmluZycpIDogUmVjb2lsX2ludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gKF9wZWVrTm9kZUxvYWRhYmxlID0gcGVla05vZGVMb2FkYWJsZSQxKHN0b3JlLCBzdGF0ZSwgbm9kZUtleSkpID09PSBudWxsIHx8IF9wZWVrTm9kZUxvYWRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGVla05vZGVMb2FkYWJsZS5jb250ZW50cztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yR2V0KHN0b3JlLCBzdGF0ZSkge1xuICAgIHJldHVybiBkZXRlY3RDaXJjdWxhckRlcGVuZGVuY2llcygoKSA9PiBnZXRTZWxlY3RvclZhbEFuZFVwZGF0ZWREZXBzKHN0b3JlLCBzdGF0ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZGF0ZVNlbGVjdG9yKHN0YXRlKSB7XG4gICAgc3RhdGUuYXRvbVZhbHVlcy5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0b3JDYWNoZShzdG9yZSwgdHJlZVN0YXRlKSB7XG4gICAgIShyZWNvaWxWYWx1ZSAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJlY29pbF9pbnZhcmlhbnQoZmFsc2UsICdSZWNvaWwgVmFsdWUgY2FuIG5ldmVyIGJlIG51bGwnKSA6IFJlY29pbF9pbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgZm9yIChjb25zdCBub2RlS2V5IG9mIGRpc2NvdmVyZWREZXBlbmRlbmN5Tm9kZUtleXMpIHtcbiAgICAgIHZhciBfbm9kZSRjbGVhckNhY2hlO1xuXG4gICAgICBjb25zdCBub2RlID0gZ2V0Tm9kZSQ2KG5vZGVLZXkpO1xuICAgICAgKF9ub2RlJGNsZWFyQ2FjaGUgPSBub2RlLmNsZWFyQ2FjaGUpID09PSBudWxsIHx8IF9ub2RlJGNsZWFyQ2FjaGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ub2RlJGNsZWFyQ2FjaGUuY2FsbChub2RlLCBzdG9yZSwgdHJlZVN0YXRlKTtcbiAgICB9XG5cbiAgICBkaXNjb3ZlcmVkRGVwZW5kZW5jeU5vZGVLZXlzLmNsZWFyKCk7XG4gICAgaW52YWxpZGF0ZVNlbGVjdG9yKHRyZWVTdGF0ZSk7XG4gICAgY2FjaGUuY2xlYXIoKTtcbiAgICBtYXJrUmVjb2lsVmFsdWVNb2RpZmllZCQxKHN0b3JlLCByZWNvaWxWYWx1ZSk7XG4gIH1cblxuICBpZiAoc2V0ICE9IG51bGwpIHtcbiAgICAvKipcbiAgICAgKiBFUzUgc3RyaWN0IG1vZGUgcHJvaGliaXRzIGRlZmluaW5nIG5vbi10b3AtbGV2ZWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zLFxuICAgICAqIHNvIGRvbid0IHVzZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzeW50YXggaGVyZVxuICAgICAqL1xuICAgIGNvbnN0IHNlbGVjdG9yU2V0ID0gKHN0b3JlLCBzdGF0ZSwgbmV3VmFsdWUpID0+IHtcbiAgICAgIGxldCBzeW5jU2VsZWN0b3JTZXRGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgY29uc3Qgd3JpdGVzID0gbmV3IE1hcCgpO1xuXG4gICAgICBmdW5jdGlvbiBnZXRSZWNvaWxWYWx1ZSh7XG4gICAgICAgIGtleTogZGVwS2V5XG4gICAgICB9KSB7XG4gICAgICAgIGlmIChzeW5jU2VsZWN0b3JTZXRGaW5pc2hlZCkge1xuICAgICAgICAgIHRocm93IFJlY29pbF9lcnIoJ1JlY29pbDogQXN5bmMgc2VsZWN0b3Igc2V0cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2FkYWJsZSA9IGdldENhY2hlZE5vZGVMb2FkYWJsZShzdG9yZSwgc3RhdGUsIGRlcEtleSk7XG5cbiAgICAgICAgaWYgKGxvYWRhYmxlLnN0YXRlID09PSAnaGFzVmFsdWUnKSB7XG4gICAgICAgICAgcmV0dXJuIGxvYWRhYmxlLmNvbnRlbnRzO1xuICAgICAgICB9IGVsc2UgaWYgKGxvYWRhYmxlLnN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmVjb2lsVmFsdWVOb3RSZWFkeSQyKGRlcEtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbG9hZGFibGUuY29udGVudHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2V0UmVjb2lsU3RhdGUocmVjb2lsU3RhdGUsIHZhbHVlT3JVcGRhdGVyKSB7XG4gICAgICAgIGlmIChzeW5jU2VsZWN0b3JTZXRGaW5pc2hlZCkge1xuICAgICAgICAgIHRocm93IFJlY29pbF9lcnIoJ1JlY29pbDogQXN5bmMgc2VsZWN0b3Igc2V0cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXRWYWx1ZSA9IHR5cGVvZiB2YWx1ZU9yVXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IC8vIGNhc3QgdG8gYW55IGJlY2F1c2Ugd2UgY2FuJ3QgcmVzdHJpY3QgdHlwZSBTIGZyb20gYmVpbmcgYSBmdW5jdGlvbiBpdHNlbGYgd2l0aG91dCBsb3Npbmcgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzXG4gICAgICAgIC8vIGZsb3dsaW50LW5leHQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG4gICAgICAgIHZhbHVlT3JVcGRhdGVyKGdldFJlY29pbFZhbHVlKHJlY29pbFN0YXRlKSkgOiB2YWx1ZU9yVXBkYXRlcjtcbiAgICAgICAgY29uc3QgdXBzdHJlYW1Xcml0ZXMgPSBzZXROb2RlVmFsdWUkMyhzdG9yZSwgc3RhdGUsIHJlY29pbFN0YXRlLmtleSwgc2V0VmFsdWUpO1xuICAgICAgICB1cHN0cmVhbVdyaXRlcy5mb3JFYWNoKCh2LCBrKSA9PiB3cml0ZXMuc2V0KGssIHYpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVzZXRSZWNvaWxTdGF0ZShyZWNvaWxTdGF0ZSkge1xuICAgICAgICBzZXRSZWNvaWxTdGF0ZShyZWNvaWxTdGF0ZSwgREVGQVVMVF9WQUxVRSQ2KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0ID0gc2V0KCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuICAgICAge1xuICAgICAgICBzZXQ6IHNldFJlY29pbFN0YXRlLFxuICAgICAgICBnZXQ6IGdldFJlY29pbFZhbHVlLFxuICAgICAgICByZXNldDogcmVzZXRSZWNvaWxTdGF0ZVxuICAgICAgfSwgbmV3VmFsdWUpOyAvLyBzZXQgc2hvdWxkIGJlIGEgdm9pZCBtZXRob2QsIGJ1dCBpZiB0aGUgdXNlciBtYWtlcyBpdCBgYXN5bmNgLCB0aGVuIGl0XG4gICAgICAvLyB3aWxsIHJldHVybiBhIFByb21pc2UsIHdoaWNoIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0LlxuXG4gICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgUmVjb2lsX2lzUHJvbWlzZShyZXQpID8gUmVjb2lsX2VycignUmVjb2lsOiBBc3luYyBzZWxlY3RvciBzZXRzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4nKSA6IFJlY29pbF9lcnIoJ1JlY29pbDogc2VsZWN0b3Igc2V0IHNob3VsZCBiZSBhIHZvaWQgZnVuY3Rpb24uJyk7XG4gICAgICB9XG5cbiAgICAgIHN5bmNTZWxlY3RvclNldEZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB3cml0ZXM7XG4gICAgfTtcblxuICAgIHJldHVybiByZWNvaWxWYWx1ZSA9IHJlZ2lzdGVyTm9kZSQxKHtcbiAgICAgIGtleSxcbiAgICAgIG5vZGVUeXBlOiAnc2VsZWN0b3InLFxuICAgICAgcGVlazogc2VsZWN0b3JQZWVrLFxuICAgICAgZ2V0OiBzZWxlY3RvckdldCxcbiAgICAgIHNldDogc2VsZWN0b3JTZXQsXG4gICAgICBpbml0OiBzZWxlY3RvckluaXQsXG4gICAgICBpbnZhbGlkYXRlOiBpbnZhbGlkYXRlU2VsZWN0b3IsXG4gICAgICBjbGVhckNhY2hlOiBjbGVhclNlbGVjdG9yQ2FjaGUsXG4gICAgICBzaG91bGREZWxldGVDb25maWdPblJlbGVhc2U6IHNlbGVjdG9yU2hvdWxkRGVsZXRlQ29uZmlnT25SZWxlYXNlLFxuICAgICAgZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHk6IG9wdGlvbnMuZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHksXG4gICAgICBzaG91bGRSZXN0b3JlRnJvbVNuYXBzaG90czogZmFsc2UsXG4gICAgICByZXRhaW5lZEJ5XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlY29pbFZhbHVlID0gcmVnaXN0ZXJOb2RlJDEoe1xuICAgICAga2V5LFxuICAgICAgbm9kZVR5cGU6ICdzZWxlY3RvcicsXG4gICAgICBwZWVrOiBzZWxlY3RvclBlZWssXG4gICAgICBnZXQ6IHNlbGVjdG9yR2V0LFxuICAgICAgaW5pdDogc2VsZWN0b3JJbml0LFxuICAgICAgaW52YWxpZGF0ZTogaW52YWxpZGF0ZVNlbGVjdG9yLFxuICAgICAgY2xlYXJDYWNoZTogY2xlYXJTZWxlY3RvckNhY2hlLFxuICAgICAgc2hvdWxkRGVsZXRlQ29uZmlnT25SZWxlYXNlOiBzZWxlY3RvclNob3VsZERlbGV0ZUNvbmZpZ09uUmVsZWFzZSxcbiAgICAgIGRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5OiBvcHRpb25zLmRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5LFxuICAgICAgc2hvdWxkUmVzdG9yZUZyb21TbmFwc2hvdHM6IGZhbHNlLFxuICAgICAgcmV0YWluZWRCeVxuICAgIH0pO1xuICB9XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXJlZGVjbGFyZSAqL1xuXG5cbnZhciBSZWNvaWxfc2VsZWN0b3IgPSBzZWxlY3RvcjtcblxuLy8gQGZiLW9ubHk6IGltcG9ydCB0eXBlIHtTY29wZVJ1bGVzfSBmcm9tICdSZWNvaWxfU2NvcGVkQXRvbSc7XG4vLyBAZmItb25seTogY29uc3Qge3Njb3BlZEF0b219ID0gcmVxdWlyZSgnUmVjb2lsX1Njb3BlZEF0b20nKTtcbmNvbnN0IHtcbiAgbG9hZGFibGVXaXRoRXJyb3I6IGxvYWRhYmxlV2l0aEVycm9yJDIsXG4gIGxvYWRhYmxlV2l0aFByb21pc2U6IGxvYWRhYmxlV2l0aFByb21pc2UkMixcbiAgbG9hZGFibGVXaXRoVmFsdWU6IGxvYWRhYmxlV2l0aFZhbHVlJDNcbn0gPSBSZWNvaWxfTG9hZGFibGUkMTtcblxuY29uc3Qge1xuICBwZWVrTm9kZUluZm86IHBlZWtOb2RlSW5mbyQzXG59ID0gUmVjb2lsX0Z1bmN0aW9uYWxDb3JlO1xuXG5jb25zdCB7XG4gIERFRkFVTFRfVkFMVUU6IERFRkFVTFRfVkFMVUUkNyxcbiAgRGVmYXVsdFZhbHVlOiBEZWZhdWx0VmFsdWUkMixcbiAgZ2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyOiBnZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMixcbiAgcmVnaXN0ZXJOb2RlOiByZWdpc3Rlck5vZGUkMixcbiAgc2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyOiBzZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMVxufSA9IFJlY29pbF9Ob2RlO1xuXG5jb25zdCB7XG4gIGlzUmVjb2lsVmFsdWU6IGlzUmVjb2lsVmFsdWUkNFxufSA9IFJlY29pbF9SZWNvaWxWYWx1ZSQxO1xuXG5jb25zdCB7XG4gIGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZTogZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDQsXG4gIG1hcmtSZWNvaWxWYWx1ZU1vZGlmaWVkOiBtYXJrUmVjb2lsVmFsdWVNb2RpZmllZCQyLFxuICBzZXRSZWNvaWxWYWx1ZTogc2V0UmVjb2lsVmFsdWUkNCxcbiAgc2V0UmVjb2lsVmFsdWVMb2FkYWJsZTogc2V0UmVjb2lsVmFsdWVMb2FkYWJsZSQyXG59ID0gUmVjb2lsX1JlY29pbFZhbHVlSW50ZXJmYWNlO1xuXG5jb25zdCB7XG4gIHJldGFpbmVkQnlPcHRpb25XaXRoRGVmYXVsdDogcmV0YWluZWRCeU9wdGlvbldpdGhEZWZhdWx0JDJcbn0gPSBSZWNvaWxfUmV0ZW50aW9uO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gYmFzZUF0b20ob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAga2V5LFxuICAgIHBlcnNpc3RlbmNlX1VOU1RBQkxFOiBwZXJzaXN0ZW5jZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmV0YWluZWRCeSA9IHJldGFpbmVkQnlPcHRpb25XaXRoRGVmYXVsdCQyKG9wdGlvbnMucmV0YWluZWRCeV9VTlNUQUJMRSk7XG4gIGxldCBsaXZlU3RvcmVzQ291bnQgPSAwO1xuICBsZXQgZGVmYXVsdExvYWRhYmxlID0gUmVjb2lsX2lzUHJvbWlzZShvcHRpb25zLmRlZmF1bHQpID8gbG9hZGFibGVXaXRoUHJvbWlzZSQyKG9wdGlvbnMuZGVmYXVsdC50aGVuKHZhbHVlID0+IHtcbiAgICBkZWZhdWx0TG9hZGFibGUgPSBsb2FkYWJsZVdpdGhWYWx1ZSQzKHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICBkZWZhdWx0TG9hZGFibGUgPSBsb2FkYWJsZVdpdGhFcnJvciQyKGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSkpIDogbG9hZGFibGVXaXRoVmFsdWUkMyhvcHRpb25zLmRlZmF1bHQpO1xuICBtYXliZUZyZWV6ZVZhbHVlT3JQcm9taXNlKG9wdGlvbnMuZGVmYXVsdCk7XG4gIGxldCBjYWNoZWRBbnN3ZXJGb3JVbnZhbGlkYXRlZFZhbHVlID0gdW5kZWZpbmVkOyAvLyBDbGVhbnVwIGhhbmRsZXJzIGZvciB0aGlzIGF0b21cbiAgLy8gUmVseSBvbiBzdGFibGUgcmVmZXJlbmNlIGVxdWFsaXR5IG9mIHRoZSBzdG9yZSB0byB1c2UgaXQgYXMgYSBrZXkgcGVyIDxSZWNvaWxSb290PlxuXG4gIGNvbnN0IGNsZWFudXBFZmZlY3RzQnlTdG9yZSA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiBtYXliZUZyZWV6ZVZhbHVlT3JQcm9taXNlKHZhbHVlT3JQcm9taXNlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKG9wdGlvbnMuZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHkgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKFJlY29pbF9pc1Byb21pc2UodmFsdWVPclByb21pc2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlT3JQcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgUmVjb2lsX2RlZXBGcmVlemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgUmVjb2lsX2RlZXBGcmVlemVWYWx1ZSh2YWx1ZU9yUHJvbWlzZSk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlT3JQcm9taXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlT3JQcm9taXNlO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcFBlbmRpbmdQcm9taXNlKHN0b3JlLCBwcm9taXNlKSB7XG4gICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBwcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgdmFyIF9zdG9yZSRnZXRTdGF0ZSRuZXh0VCwgX3N0YXRlJGF0b21WYWx1ZXMkZ2V0O1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IChfc3RvcmUkZ2V0U3RhdGUkbmV4dFQgPSBzdG9yZS5nZXRTdGF0ZSgpLm5leHRUcmVlKSAhPT0gbnVsbCAmJiBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQgIT09IHZvaWQgMCA/IF9zdG9yZSRnZXRTdGF0ZSRuZXh0VCA6IHN0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWU7XG5cbiAgICAgIGlmICgoKF9zdGF0ZSRhdG9tVmFsdWVzJGdldCA9IHN0YXRlLmF0b21WYWx1ZXMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9zdGF0ZSRhdG9tVmFsdWVzJGdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0YXRlJGF0b21WYWx1ZXMkZ2V0LmNvbnRlbnRzKSA9PT0gd3JhcHBlZFByb21pc2UpIHtcbiAgICAgICAgc2V0UmVjb2lsVmFsdWUkNChzdG9yZSwgbm9kZSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdmFyIF9zdG9yZSRnZXRTdGF0ZSRuZXh0VDIsIF9zdGF0ZSRhdG9tVmFsdWVzJGdldDI7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gKF9zdG9yZSRnZXRTdGF0ZSRuZXh0VDIgPSBzdG9yZS5nZXRTdGF0ZSgpLm5leHRUcmVlKSAhPT0gbnVsbCAmJiBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQyICE9PSB2b2lkIDAgPyBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQyIDogc3RvcmUuZ2V0U3RhdGUoKS5jdXJyZW50VHJlZTtcblxuICAgICAgaWYgKCgoX3N0YXRlJGF0b21WYWx1ZXMkZ2V0MiA9IHN0YXRlLmF0b21WYWx1ZXMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9zdGF0ZSRhdG9tVmFsdWVzJGdldDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zdGF0ZSRhdG9tVmFsdWVzJGdldDIuY29udGVudHMpID09PSB3cmFwcGVkUHJvbWlzZSkge1xuICAgICAgICBzZXRSZWNvaWxWYWx1ZUxvYWRhYmxlJDIoc3RvcmUsIG5vZGUsIGxvYWRhYmxlV2l0aEVycm9yJDIoZXJyb3IpKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIHdyYXBwZWRQcm9taXNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEF0b20oc3RvcmUsIGluaXRTdGF0ZSwgdHJpZ2dlcikge1xuICAgIHZhciBfb3B0aW9ucyRlZmZlY3RzO1xuXG4gICAgbGl2ZVN0b3Jlc0NvdW50Kys7XG5cbiAgICBjb25zdCBjbGVhbnVwQXRvbSA9ICgpID0+IHtcbiAgICAgIHZhciBfY2xlYW51cEVmZmVjdHNCeVN0b3I7XG5cbiAgICAgIGxpdmVTdG9yZXNDb3VudC0tO1xuICAgICAgKF9jbGVhbnVwRWZmZWN0c0J5U3RvciA9IGNsZWFudXBFZmZlY3RzQnlTdG9yZS5nZXQoc3RvcmUpKSA9PT0gbnVsbCB8fCBfY2xlYW51cEVmZmVjdHNCeVN0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGVhbnVwRWZmZWN0c0J5U3Rvci5mb3JFYWNoKGNsZWFudXAgPT4gY2xlYW51cCgpKTtcbiAgICAgIGNsZWFudXBFZmZlY3RzQnlTdG9yZS5kZWxldGUoc3RvcmUpO1xuICAgIH07XG5cbiAgICBzdG9yZS5nZXRTdGF0ZSgpLmtub3duQXRvbXMuYWRkKGtleSk7IC8vIFNldHVwIGFzeW5jIGRlZmF1bHRzIHRvIG5vdGlmeSBzdWJzY3JpYmVycyB3aGVuIHRoZXkgcmVzb2x2ZVxuXG4gICAgaWYgKGRlZmF1bHRMb2FkYWJsZS5zdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICBjb25zdCBub3RpZnlEZWZhdWx0U3Vic2NyaWJlcnMgPSAoKSA9PiB7XG4gICAgICAgIHZhciBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQzO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlID0gKF9zdG9yZSRnZXRTdGF0ZSRuZXh0VDMgPSBzdG9yZS5nZXRTdGF0ZSgpLm5leHRUcmVlKSAhPT0gbnVsbCAmJiBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQzICE9PSB2b2lkIDAgPyBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQzIDogc3RvcmUuZ2V0U3RhdGUoKS5jdXJyZW50VHJlZTtcblxuICAgICAgICBpZiAoIXN0YXRlLmF0b21WYWx1ZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBtYXJrUmVjb2lsVmFsdWVNb2RpZmllZCQyKHN0b3JlLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZGVmYXVsdExvYWRhYmxlLmNvbnRlbnRzLmZpbmFsbHkobm90aWZ5RGVmYXVsdFN1YnNjcmliZXJzKTtcbiAgICB9IC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSdW4gQXRvbSBFZmZlY3RzXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbiAgICBjb25zdCBlZmZlY3RzID0gKF9vcHRpb25zJGVmZmVjdHMgPSBvcHRpb25zLmVmZmVjdHMpICE9PSBudWxsICYmIF9vcHRpb25zJGVmZmVjdHMgIT09IHZvaWQgMCA/IF9vcHRpb25zJGVmZmVjdHMgOiBvcHRpb25zLmVmZmVjdHNfVU5TVEFCTEU7XG5cbiAgICBpZiAoZWZmZWN0cyAhPSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHN0YXRlIGlzIHNjb3BlZCBieSBTdG9yZSwgc2luY2UgdGhpcyBpcyBpbiB0aGUgaW5pdEF0b20oKSBjbG9zdXJlXG4gICAgICBsZXQgZHVyaW5nSW5pdCA9IHRydWU7XG4gICAgICBsZXQgaW5pdFZhbHVlID0gREVGQVVMVF9WQUxVRSQ3O1xuICAgICAgbGV0IGlzSW5pdEVycm9yID0gZmFsc2U7XG4gICAgICBsZXQgcGVuZGluZ1NldFNlbGYgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBnZXRMb2FkYWJsZShyZWNvaWxWYWx1ZSkge1xuICAgICAgICAvLyBOb3JtYWxseSB3ZSBjYW4ganVzdCBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYW5vdGhlciBhdG9tLlxuICAgICAgICAvLyBCdXQgZm9yIG91ciBvd24gdmFsdWUgd2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIHBlbmRpbmdcbiAgICAgICAgLy8gaW5pdGlhbGl6ZWQgdmFsdWUgb3IgZ2V0IHRoZSBmYWxsYmFjayBkZWZhdWx0IHZhbHVlLlxuICAgICAgICBpZiAoZHVyaW5nSW5pdCAmJiByZWNvaWxWYWx1ZS5rZXkgPT09IGtleSkge1xuICAgICAgICAgIC8vIENhc3QgVCB0byBTXG4gICAgICAgICAgY29uc3QgcmV0VmFsdWUgPSBpbml0VmFsdWU7IC8vIGZsb3dsaW50LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuXG4gICAgICAgICAgcmV0dXJuIHJldFZhbHVlIGluc3RhbmNlb2YgRGVmYXVsdFZhbHVlJDIgPyBwZWVrQXRvbShzdG9yZSwgaW5pdFN0YXRlKSAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTpvZmZcbiAgICAgICAgICA6IFJlY29pbF9pc1Byb21pc2UocmV0VmFsdWUpID8gbG9hZGFibGVXaXRoUHJvbWlzZSQyKHJldFZhbHVlLnRoZW4odiA9PiB2IGluc3RhbmNlb2YgRGVmYXVsdFZhbHVlJDIgPyAvLyBDYXN0IFQgdG8gU1xuICAgICAgICAgIGRlZmF1bHRMb2FkYWJsZS50b1Byb21pc2UoKSAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTpvZmZcbiAgICAgICAgICA6IHYpKSA6IGxvYWRhYmxlV2l0aFZhbHVlJDMocmV0VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldFJlY29pbFZhbHVlQXNMb2FkYWJsZSQ0KHN0b3JlLCByZWNvaWxWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldFByb21pc2UocmVjb2lsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGdldExvYWRhYmxlKHJlY29pbFZhbHVlKS50b1Byb21pc2UoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZ2V0SW5mb19VTlNUQUJMRShyZWNvaWxWYWx1ZSkge1xuICAgICAgICB2YXIgX3N0b3JlJGdldFN0YXRlJG5leHRUNDtcblxuICAgICAgICBjb25zdCBpbmZvID0gcGVla05vZGVJbmZvJDMoc3RvcmUsIChfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ0ID0gc3RvcmUuZ2V0U3RhdGUoKS5uZXh0VHJlZSkgIT09IG51bGwgJiYgX3N0b3JlJGdldFN0YXRlJG5leHRUNCAhPT0gdm9pZCAwID8gX3N0b3JlJGdldFN0YXRlJG5leHRUNCA6IHN0b3JlLmdldFN0YXRlKCkuY3VycmVudFRyZWUsIHJlY29pbFZhbHVlLmtleSk7XG4gICAgICAgIHJldHVybiBkdXJpbmdJbml0ICYmIHJlY29pbFZhbHVlLmtleSA9PT0ga2V5ICYmICEoaW5pdFZhbHVlIGluc3RhbmNlb2YgRGVmYXVsdFZhbHVlJDIpID8geyAuLi5pbmZvLFxuICAgICAgICAgIGlzU2V0OiB0cnVlLFxuICAgICAgICAgIGxvYWRhYmxlOiBnZXRMb2FkYWJsZShyZWNvaWxWYWx1ZSlcbiAgICAgICAgfSA6IGluZm87XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldFNlbGYgPSBlZmZlY3QgPT4gdmFsdWVPclVwZGF0ZXIgPT4ge1xuICAgICAgICBpZiAoZHVyaW5nSW5pdCkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMb2FkYWJsZSA9IGdldExvYWRhYmxlKG5vZGUpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRMb2FkYWJsZS5zdGF0ZSA9PT0gJ2hhc1ZhbHVlJyA/IGN1cnJlbnRMb2FkYWJsZS5jb250ZW50cyA6IERFRkFVTFRfVkFMVUUkNztcbiAgICAgICAgICBpbml0VmFsdWUgPSB0eXBlb2YgdmFsdWVPclVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyAvLyBjYXN0IHRvIGFueSBiZWNhdXNlIHdlIGNhbid0IHJlc3RyaWN0IFQgZnJvbSBiZWluZyBhIGZ1bmN0aW9uIHdpdGhvdXQgbG9zaW5nIHN1cHBvcnQgZm9yIG9wYXF1ZSB0eXBlc1xuICAgICAgICAgIHZhbHVlT3JVcGRhdGVyKGN1cnJlbnRWYWx1ZSkgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG4gICAgICAgICAgOiB2YWx1ZU9yVXBkYXRlcjtcblxuICAgICAgICAgIGlmIChSZWNvaWxfaXNQcm9taXNlKGluaXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGluaXRWYWx1ZSA9IGluaXRWYWx1ZS50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBvblNldCgpIHdoZW4gc2V0U2VsZigpIGluaXRpYWxpemVzIHdpdGggYSBQcm9taXNlXG4gICAgICAgICAgICAgIHBlbmRpbmdTZXRTZWxmID0ge1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFJlY29pbF9pc1Byb21pc2UodmFsdWVPclVwZGF0ZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBSZWNvaWxfZXJyKCdTZXR0aW5nIGF0b21zIHRvIGFzeW5jIHZhbHVlcyBpcyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZU9yVXBkYXRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGVuZGluZ1NldFNlbGYgPSB7XG4gICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlT3JVcGRhdGVyXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFJlY29pbFZhbHVlJDQoc3RvcmUsIG5vZGUsIHR5cGVvZiB2YWx1ZU9yVXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnRWYWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IC8vIGNhc3QgdG8gYW55IGJlY2F1c2Ugd2UgY2FuJ3QgcmVzdHJpY3QgVCBmcm9tIGJlaW5nIGEgZnVuY3Rpb24gd2l0aG91dCBsb3Npbmcgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzXG4gICAgICAgICAgICB2YWx1ZU9yVXBkYXRlcihjdXJyZW50VmFsdWUpOyAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTpvZmZcblxuICAgICAgICAgICAgcGVuZGluZ1NldFNlbGYgPSB7XG4gICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgICAgICAgIH0gOiB2YWx1ZU9yVXBkYXRlcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc2V0U2VsZiA9IGVmZmVjdCA9PiAoKSA9PiBzZXRTZWxmKGVmZmVjdCkoREVGQVVMVF9WQUxVRSQ3KTtcblxuICAgICAgY29uc3Qgb25TZXQgPSBlZmZlY3QgPT4gaGFuZGxlciA9PiB7XG4gICAgICAgIHZhciBfY2xlYW51cEVmZmVjdHNCeVN0b3IyO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZWxlYXNlXG4gICAgICAgIH0gPSBzdG9yZS5zdWJzY3JpYmVUb1RyYW5zYWN0aW9ucyhjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgIHZhciBfY3VycmVudFRyZWUkYXRvbVZhbHU7XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGN1cnJlbnRUcmVlLFxuICAgICAgICAgICAgcHJldmlvdXNUcmVlXG4gICAgICAgICAgfSA9IGN1cnJlbnRTdG9yZS5nZXRTdGF0ZSgpO1xuXG4gICAgICAgICAgaWYgKCFwcmV2aW91c1RyZWUpIHtcbiAgICAgICAgICAgIFJlY29pbF9yZWNvdmVyYWJsZVZpb2xhdGlvbignVHJhbnNhY3Rpb24gc3Vic2NyaWJlcnMgbm90aWZpZWQgd2l0aG91dCBhIG5leHQgdHJlZSBiZWluZyBwcmVzZW50IC0tIHRoaXMgaXMgYSBidWcgaW4gUmVjb2lsJyk7XG4gICAgICAgICAgICBwcmV2aW91c1RyZWUgPSBjdXJyZW50VHJlZTsgLy8gYXR0ZW1wdCB0byB0cnVuZGxlIG9uXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV3TG9hZGFibGUgPSAoX2N1cnJlbnRUcmVlJGF0b21WYWx1ID0gY3VycmVudFRyZWUuYXRvbVZhbHVlcy5nZXQoa2V5KSkgIT09IG51bGwgJiYgX2N1cnJlbnRUcmVlJGF0b21WYWx1ICE9PSB2b2lkIDAgPyBfY3VycmVudFRyZWUkYXRvbVZhbHUgOiBkZWZhdWx0TG9hZGFibGU7XG5cbiAgICAgICAgICBpZiAobmV3TG9hZGFibGUuc3RhdGUgPT09ICdoYXNWYWx1ZScpIHtcbiAgICAgICAgICAgIHZhciBfcHJldmlvdXNUcmVlJGF0b21WYWwsIF9wZW5kaW5nU2V0U2VsZiwgX3BlbmRpbmdTZXRTZWxmMiwgX3BlbmRpbmdTZXRTZWxmMztcblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXdMb2FkYWJsZS5jb250ZW50cztcbiAgICAgICAgICAgIGNvbnN0IG9sZExvYWRhYmxlID0gKF9wcmV2aW91c1RyZWUkYXRvbVZhbCA9IHByZXZpb3VzVHJlZS5hdG9tVmFsdWVzLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfcHJldmlvdXNUcmVlJGF0b21WYWwgIT09IHZvaWQgMCA/IF9wcmV2aW91c1RyZWUkYXRvbVZhbCA6IGRlZmF1bHRMb2FkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkTG9hZGFibGUuc3RhdGUgPT09ICdoYXNWYWx1ZScgPyBvbGRMb2FkYWJsZS5jb250ZW50cyA6IERFRkFVTFRfVkFMVUUkNzsgLy8gVE9ETyBUaGlzIGlzbid0IGFjdHVhbGx5IHZhbGlkLCB1c2UgYXMgYSBwbGFjZWhvbGRlciBmb3Igbm93LlxuICAgICAgICAgICAgLy8gSWdub3JlIGF0b20gdmFsdWUgY2hhbmdlcyB0aGF0IHdlcmUgc2V0IHZpYSBzZXRTZWxmKCkgaW4gdGhlIHNhbWUgZWZmZWN0LlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBzdGlsbCBwcm9wZXJseSBjYWxsIHRoZSBoYW5kbGVyIGlmIHRoZXJlIHdhcyBhIHN1YnNlcXVlbnRcbiAgICAgICAgICAgIC8vIHNldCBmcm9tIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIGF0b20gZWZmZWN0IHdoaWNoIHdhcyBiYXRjaGVkXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBgc2V0U2VsZigpYCBjYWxsLiAgSG93ZXZlciwgd2UgbWF5IGluY29ycmVjdGx5IGlnbm9yZVxuICAgICAgICAgICAgLy8gdGhlIGhhbmRsZXIgaWYgdGhlIHN1YnNlcXVlbnQgYmF0Y2hlZCBjYWxsIGhhcHBlbnMgdG8gc2V0IHRoZVxuICAgICAgICAgICAgLy8gYXRvbSB0byB0aGUgZXhhY3Qgc2FtZSB2YWx1ZSBhcyB0aGUgYHNldFNlbGYoKWAuICAgQnV0LCBpbiB0aGF0XG4gICAgICAgICAgICAvLyBjYXNlLCBpdCB3YXMga2luZCBvZiBhIG5vb3AsIHNvIHRoZSBzZW1hbnRpY3MgYXJlIGRlYmF0YWJsZS4uXG5cbiAgICAgICAgICAgIGlmICgoKF9wZW5kaW5nU2V0U2VsZiA9IHBlbmRpbmdTZXRTZWxmKSA9PT0gbnVsbCB8fCBfcGVuZGluZ1NldFNlbGYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wZW5kaW5nU2V0U2VsZi5lZmZlY3QpICE9PSBlZmZlY3QgfHwgKChfcGVuZGluZ1NldFNlbGYyID0gcGVuZGluZ1NldFNlbGYpID09PSBudWxsIHx8IF9wZW5kaW5nU2V0U2VsZjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wZW5kaW5nU2V0U2VsZjIudmFsdWUpICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSwgIWN1cnJlbnRUcmVlLmF0b21WYWx1ZXMuaGFzKGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoKF9wZW5kaW5nU2V0U2VsZjMgPSBwZW5kaW5nU2V0U2VsZikgPT09IG51bGwgfHwgX3BlbmRpbmdTZXRTZWxmMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BlbmRpbmdTZXRTZWxmMy5lZmZlY3QpID09PSBlZmZlY3QpIHtcbiAgICAgICAgICAgICAgcGVuZGluZ1NldFNlbGYgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwga2V5KTtcbiAgICAgICAgY2xlYW51cEVmZmVjdHNCeVN0b3JlLnNldChzdG9yZSwgWy4uLigoX2NsZWFudXBFZmZlY3RzQnlTdG9yMiA9IGNsZWFudXBFZmZlY3RzQnlTdG9yZS5nZXQoc3RvcmUpKSAhPT0gbnVsbCAmJiBfY2xlYW51cEVmZmVjdHNCeVN0b3IyICE9PSB2b2lkIDAgPyBfY2xlYW51cEVmZmVjdHNCeVN0b3IyIDogW10pLCByZWxlYXNlXSk7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBlZmZlY3RzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2xlYW51cCA9IGVmZmVjdCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgc3RvcmVJRDogc3RvcmUuc3RvcmVJRCxcbiAgICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgICBzZXRTZWxmOiBzZXRTZWxmKGVmZmVjdCksXG4gICAgICAgICAgICByZXNldFNlbGY6IHJlc2V0U2VsZihlZmZlY3QpLFxuICAgICAgICAgICAgb25TZXQ6IG9uU2V0KGVmZmVjdCksXG4gICAgICAgICAgICBnZXRQcm9taXNlLFxuICAgICAgICAgICAgZ2V0TG9hZGFibGUsXG4gICAgICAgICAgICBnZXRJbmZvX1VOU1RBQkxFXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgX2NsZWFudXBFZmZlY3RzQnlTdG9yMztcblxuICAgICAgICAgICAgY2xlYW51cEVmZmVjdHNCeVN0b3JlLnNldChzdG9yZSwgWy4uLigoX2NsZWFudXBFZmZlY3RzQnlTdG9yMyA9IGNsZWFudXBFZmZlY3RzQnlTdG9yZS5nZXQoc3RvcmUpKSAhPT0gbnVsbCAmJiBfY2xlYW51cEVmZmVjdHNCeVN0b3IzICE9PSB2b2lkIDAgPyBfY2xlYW51cEVmZmVjdHNCeVN0b3IzIDogW10pLCBjbGVhbnVwXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGluaXRWYWx1ZSA9IGVycm9yO1xuICAgICAgICAgIGlzSW5pdEVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkdXJpbmdJbml0ID0gZmFsc2U7IC8vIE11dGF0ZSBpbml0aWFsIHN0YXRlIGluIHBsYWNlIHNpbmNlIHdlIGtub3cgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnNjcmliZXJzXG4gICAgICAvLyBzaW5jZSB3ZSBhcmUgdGhlIG9uZXMgaW5pdGlhbGl6aW5nIG9uIGZpcnN0IHVzZS5cblxuICAgICAgaWYgKCEoaW5pdFZhbHVlIGluc3RhbmNlb2YgRGVmYXVsdFZhbHVlJDIpKSB7XG4gICAgICAgIHZhciBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ1O1xuXG4gICAgICAgIGNvbnN0IGZyb3plbkluaXRWYWx1ZSA9IG1heWJlRnJlZXplVmFsdWVPclByb21pc2UoaW5pdFZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5pdExvYWRhYmxlID0gaXNJbml0RXJyb3IgPyBsb2FkYWJsZVdpdGhFcnJvciQyKGluaXRWYWx1ZSkgOiBSZWNvaWxfaXNQcm9taXNlKGZyb3plbkluaXRWYWx1ZSkgPyBsb2FkYWJsZVdpdGhQcm9taXNlJDIod3JhcFBlbmRpbmdQcm9taXNlKHN0b3JlLCBmcm96ZW5Jbml0VmFsdWUpKSA6IGxvYWRhYmxlV2l0aFZhbHVlJDMoZnJvemVuSW5pdFZhbHVlKTtcbiAgICAgICAgaW5pdFN0YXRlLmF0b21WYWx1ZXMuc2V0KGtleSwgaW5pdExvYWRhYmxlKTsgLy8gSWYgdGhlcmUgaXMgYSBwZW5kaW5nIHRyYW5zYWN0aW9uLCB0aGVuIGFsc28gbXV0YXRlIHRoZSBuZXh0IHN0YXRlIHRyZWUuXG4gICAgICAgIC8vIFRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBhdG9tIHdhcyBmaXJzdCBpbml0aWFsaXplZCBpbiBhbiBhY3Rpb24gdGhhdFxuICAgICAgICAvLyBhbHNvIHVwZGF0ZWQgc29tZSBvdGhlciBhdG9tJ3Mgc3RhdGUuXG5cbiAgICAgICAgKF9zdG9yZSRnZXRTdGF0ZSRuZXh0VDUgPSBzdG9yZS5nZXRTdGF0ZSgpLm5leHRUcmVlKSA9PT0gbnVsbCB8fCBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ1LmF0b21WYWx1ZXMuc2V0KGtleSwgaW5pdExvYWRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xlYW51cEF0b207XG4gIH1cblxuICBmdW5jdGlvbiBwZWVrQXRvbShfc3RvcmUsIHN0YXRlKSB7XG4gICAgdmFyIF9yZWYsIF9zdGF0ZSRhdG9tVmFsdWVzJGdldDM7XG5cbiAgICByZXR1cm4gKF9yZWYgPSAoX3N0YXRlJGF0b21WYWx1ZXMkZ2V0MyA9IHN0YXRlLmF0b21WYWx1ZXMuZ2V0KGtleSkpICE9PSBudWxsICYmIF9zdGF0ZSRhdG9tVmFsdWVzJGdldDMgIT09IHZvaWQgMCA/IF9zdGF0ZSRhdG9tVmFsdWVzJGdldDMgOiBjYWNoZWRBbnN3ZXJGb3JVbnZhbGlkYXRlZFZhbHVlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvYWRhYmxlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXRvbShfc3RvcmUsIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmF0b21WYWx1ZXMuaGFzKGtleSkpIHtcbiAgICAgIC8vIEF0b20gdmFsdWUgaXMgc3RvcmVkIGluIHN0YXRlOlxuICAgICAgcmV0dXJuIFJlY29pbF9udWxsdGhyb3dzKHN0YXRlLmF0b21WYWx1ZXMuZ2V0KGtleSkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUubm9udmFsaWRhdGVkQXRvbXMuaGFzKGtleSkpIHtcbiAgICAgIC8vIEF0b20gdmFsdWUgaXMgc3RvcmVkIGJ1dCBuZWVkcyB2YWxpZGF0aW9uIGJlZm9yZSB1c2UuXG4gICAgICAvLyBXZSBtaWdodCBoYXZlIGFscmVhZHkgdmFsaWRhdGVkIGl0IGFuZCBoYXZlIGEgY2FjaGVkIHZhbGlkYXRlZCB2YWx1ZTpcbiAgICAgIGlmIChjYWNoZWRBbnN3ZXJGb3JVbnZhbGlkYXRlZFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEFuc3dlckZvclVudmFsaWRhdGVkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJzaXN0ZW5jZSA9PSBudWxsKSB7XG4gICAgICAgIFJlY29pbF9leHBlY3RhdGlvblZpb2xhdGlvbihgVHJpZWQgdG8gcmVzdG9yZSBhIHBlcnNpc3RlZCB2YWx1ZSBmb3IgYXRvbSAke2tleX0gYnV0IGl0IGhhcyBubyBwZXJzaXN0ZW5jZSBzZXR0aW5ncy5gKTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMb2FkYWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9udmFsaWRhdGVkVmFsdWUgPSBzdGF0ZS5ub252YWxpZGF0ZWRBdG9tcy5nZXQoa2V5KTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdCA9IHBlcnNpc3RlbmNlLnZhbGlkYXRvcihub252YWxpZGF0ZWRWYWx1ZSwgREVGQVVMVF9WQUxVRSQ3KTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlTG9hZGFibGUgPSB2YWxpZGF0b3JSZXN1bHQgaW5zdGFuY2VvZiBEZWZhdWx0VmFsdWUkMiA/IGRlZmF1bHRMb2FkYWJsZSA6IGxvYWRhYmxlV2l0aFZhbHVlJDModmFsaWRhdG9yUmVzdWx0KTtcbiAgICAgIGNhY2hlZEFuc3dlckZvclVudmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRWYWx1ZUxvYWRhYmxlO1xuICAgICAgcmV0dXJuIGNhY2hlZEFuc3dlckZvclVudmFsaWRhdGVkVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZhdWx0TG9hZGFibGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZGF0ZUF0b20oKSB7XG4gICAgY2FjaGVkQW5zd2VyRm9yVW52YWxpZGF0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEF0b20oX3N0b3JlLCBzdGF0ZSwgbmV3VmFsdWUpIHtcbiAgICAvLyBCYWlsIG91dCBpZiB3ZSdyZSBiZWluZyBzZXQgdG8gdGhlIGV4aXN0aW5nIHZhbHVlLCBvciBpZiB3ZSdyZSBiZWluZ1xuICAgIC8vIHJlc2V0IGJ1dCBoYXZlIG5vIHN0b3JlZCB2YWx1ZSAodmFsaWRhdGVkIG9yIHVudmFsaWRhdGVkKSB0byByZXNldCBmcm9tOlxuICAgIGlmIChzdGF0ZS5hdG9tVmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFJlY29pbF9udWxsdGhyb3dzKHN0YXRlLmF0b21WYWx1ZXMuZ2V0KGtleSkpO1xuXG4gICAgICBpZiAoZXhpc3Rpbmcuc3RhdGUgPT09ICdoYXNWYWx1ZScgJiYgbmV3VmFsdWUgPT09IGV4aXN0aW5nLmNvbnRlbnRzKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc3RhdGUubm9udmFsaWRhdGVkQXRvbXMuaGFzKGtleSkgJiYgbmV3VmFsdWUgaW5zdGFuY2VvZiBEZWZhdWx0VmFsdWUkMikge1xuICAgICAgcmV0dXJuIG5ldyBNYXAoKTtcbiAgICB9XG5cbiAgICBtYXliZUZyZWV6ZVZhbHVlT3JQcm9taXNlKG5ld1ZhbHVlKTtcbiAgICBjYWNoZWRBbnN3ZXJGb3JVbnZhbGlkYXRlZFZhbHVlID0gdW5kZWZpbmVkOyAvLyBjYW4gYmUgcmVsZWFzZWQgbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IGluIHVzZVxuXG4gICAgcmV0dXJuIG5ldyBNYXAoKS5zZXQoa2V5LCBsb2FkYWJsZVdpdGhWYWx1ZSQzKG5ld1ZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGREZWxldGVDb25maWdPblJlbGVhc2VBdG9tKCkge1xuICAgIHJldHVybiBnZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMihrZXkpICE9PSB1bmRlZmluZWQgJiYgbGl2ZVN0b3Jlc0NvdW50IDw9IDA7XG4gIH1cblxuICBjb25zdCBub2RlID0gcmVnaXN0ZXJOb2RlJDIoe1xuICAgIGtleSxcbiAgICBub2RlVHlwZTogJ2F0b20nLFxuICAgIHBlZWs6IHBlZWtBdG9tLFxuICAgIGdldDogZ2V0QXRvbSxcbiAgICBzZXQ6IHNldEF0b20sXG4gICAgaW5pdDogaW5pdEF0b20sXG4gICAgaW52YWxpZGF0ZTogaW52YWxpZGF0ZUF0b20sXG4gICAgc2hvdWxkRGVsZXRlQ29uZmlnT25SZWxlYXNlOiBzaG91bGREZWxldGVDb25maWdPblJlbGVhc2VBdG9tLFxuICAgIGRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5OiBvcHRpb25zLmRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5LFxuICAgIHBlcnNpc3RlbmNlX1VOU1RBQkxFOiBvcHRpb25zLnBlcnNpc3RlbmNlX1VOU1RBQkxFID8ge1xuICAgICAgdHlwZTogb3B0aW9ucy5wZXJzaXN0ZW5jZV9VTlNUQUJMRS50eXBlLFxuICAgICAgYmFja0J1dHRvbjogb3B0aW9ucy5wZXJzaXN0ZW5jZV9VTlNUQUJMRS5iYWNrQnV0dG9uXG4gICAgfSA6IHVuZGVmaW5lZCxcbiAgICBzaG91bGRSZXN0b3JlRnJvbVNuYXBzaG90czogdHJ1ZSxcbiAgICByZXRhaW5lZEJ5XG4gIH0pO1xuICByZXR1cm4gbm9kZTtcbn0gLy8gcHJldHRpZXItaWdub3JlXG5cblxuZnVuY3Rpb24gYXRvbShvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMua2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgUmVjb2lsX2VycignQSBrZXkgb3B0aW9uIHdpdGggYSB1bmlxdWUgc3RyaW5nIHZhbHVlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyBhbiBhdG9tLicpO1xuICAgIH1cblxuICAgIGlmICghKCdkZWZhdWx0JyBpbiBvcHRpb25zKSkge1xuICAgICAgdGhyb3cgUmVjb2lsX2VycignQSBkZWZhdWx0IHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gY3JlYXRpbmcgYW4gYXRvbS4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB7XG4gICAgZGVmYXVsdDogb3B0aW9uc0RlZmF1bHQsXG4gICAgLy8gQGZiLW9ubHk6IHNjb3BlUnVsZXNfQVBQRU5EX09OTFlfUkVBRF9USEVfRE9DUyxcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gb3B0aW9ucztcblxuICBpZiAoaXNSZWNvaWxWYWx1ZSQ0KG9wdGlvbnNEZWZhdWx0KSAvLyBDb250aW51ZSB0byB1c2UgYXRvbVdpdGhGYWxsYmFjayBmb3IgcHJvbWlzZSBkZWZhdWx0cyBmb3Igc2NvcGVkIGF0b21zXG4gIC8vIGZvciBub3csIHNpbmNlIHNjb3BlZCBhdG9tcyBkb24ndCBzdXBwb3J0IGFzeW5jIGRlZmF1bHRzXG4gIC8vIEBmYi1vbmx5OiB8fCAoaXNQcm9taXNlKG9wdGlvbnNEZWZhdWx0KSAmJiBzY29wZVJ1bGVzX0FQUEVORF9PTkxZX1JFQURfVEhFX0RPQ1MpXG4gICkge1xuICAgIHJldHVybiBhdG9tV2l0aEZhbGxiYWNrKHsgLi4ucmVzdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0OiBvcHRpb25zRGVmYXVsdCAvLyBAZmItb25seTogc2NvcGVSdWxlc19BUFBFTkRfT05MWV9SRUFEX1RIRV9ET0NTLFxuXG4gICAgfSk7IC8vIEBmYi1vbmx5OiB9IGVsc2UgaWYgKHNjb3BlUnVsZXNfQVBQRU5EX09OTFlfUkVBRF9USEVfRE9DUyAmJiAhaXNQcm9taXNlKG9wdGlvbnNEZWZhdWx0KSkge1xuICAgIC8vIEBmYi1vbmx5OiByZXR1cm4gc2NvcGVkQXRvbTxUPih7XG4gICAgLy8gQGZiLW9ubHk6IC4uLnJlc3RPcHRpb25zLFxuICAgIC8vIEBmYi1vbmx5OiBkZWZhdWx0OiBvcHRpb25zRGVmYXVsdCxcbiAgICAvLyBAZmItb25seTogc2NvcGVSdWxlc19BUFBFTkRfT05MWV9SRUFEX1RIRV9ET0NTLFxuICAgIC8vIEBmYi1vbmx5OiB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZUF0b20oeyAuLi5yZXN0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHQ6IG9wdGlvbnNEZWZhdWx0XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXRvbVdpdGhGYWxsYmFjayhvcHRpb25zKSB7XG4gIGNvbnN0IGJhc2UgPSBhdG9tKHsgLi4ub3B0aW9ucyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX1ZBTFVFJDcsXG4gICAgcGVyc2lzdGVuY2VfVU5TVEFCTEU6IG9wdGlvbnMucGVyc2lzdGVuY2VfVU5TVEFCTEUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHsgLi4ub3B0aW9ucy5wZXJzaXN0ZW5jZV9VTlNUQUJMRSxcbiAgICAgIHZhbGlkYXRvcjogc3RvcmVkVmFsdWUgPT4gc3RvcmVkVmFsdWUgaW5zdGFuY2VvZiBEZWZhdWx0VmFsdWUkMiA/IHN0b3JlZFZhbHVlIDogUmVjb2lsX251bGx0aHJvd3Mob3B0aW9ucy5wZXJzaXN0ZW5jZV9VTlNUQUJMRSkudmFsaWRhdG9yKHN0b3JlZFZhbHVlLCBERUZBVUxUX1ZBTFVFJDcpXG4gICAgfSxcbiAgICAvLyBUT0RPIEhhY2sgZm9yIG5vdy5cbiAgICBlZmZlY3RzOiBvcHRpb25zLmVmZmVjdHMsXG4gICAgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6IG9mZlxuICAgIGVmZmVjdHNfVU5TVEFCTEU6IG9wdGlvbnMuZWZmZWN0c19VTlNUQUJMRSAvLyBmbG93bGludC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG5cbiAgfSk7XG4gIGNvbnN0IHNlbCA9IFJlY29pbF9zZWxlY3Rvcih7XG4gICAga2V5OiBgJHtvcHRpb25zLmtleX1fX3dpdGhGYWxsYmFja2AsXG4gICAgZ2V0OiAoe1xuICAgICAgZ2V0XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgYmFzZVZhbHVlID0gZ2V0KGJhc2UpO1xuICAgICAgcmV0dXJuIGJhc2VWYWx1ZSBpbnN0YW5jZW9mIERlZmF1bHRWYWx1ZSQyID8gb3B0aW9ucy5kZWZhdWx0IDogYmFzZVZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiAoe1xuICAgICAgc2V0XG4gICAgfSwgbmV3VmFsdWUpID0+IHNldChiYXNlLCBuZXdWYWx1ZSksXG4gICAgZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHk6IG9wdGlvbnMuZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHlcbiAgfSk7XG4gIHNldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQxKHNlbC5rZXksIGdldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQyKG9wdGlvbnMua2V5KSk7XG4gIHJldHVybiBzZWw7XG59XG5cbnZhciBSZWNvaWxfYXRvbSA9IGF0b207XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5jbGFzcyBNYXBDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB2YXIgX29wdGlvbnMkbWFwS2V5O1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX21hcFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2tleU1hcHBlclwiLCB2b2lkIDApO1xuXG4gICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2tleU1hcHBlciA9IChfb3B0aW9ucyRtYXBLZXkgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWFwS2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRtYXBLZXkgIT09IHZvaWQgMCA/IF9vcHRpb25zJG1hcEtleSA6IHYgPT4gdjtcbiAgfVxuXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC5zaXplO1xuICB9XG5cbiAgaGFzKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHRoaXMuX2tleU1hcHBlcihrZXkpKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmdldCh0aGlzLl9rZXlNYXBwZXIoa2V5KSk7XG4gIH1cblxuICBzZXQoa2V5LCB2YWwpIHtcbiAgICB0aGlzLl9tYXAuc2V0KHRoaXMuX2tleU1hcHBlcihrZXkpLCB2YWwpO1xuICB9XG5cbiAgZGVsZXRlKGtleSkge1xuICAgIHRoaXMuX21hcC5kZWxldGUodGhpcy5fa2V5TWFwcGVyKGtleSkpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fbWFwLmNsZWFyKCk7XG4gIH1cblxufVxuXG52YXIgUmVjb2lsX01hcENhY2hlID0ge1xuICBNYXBDYWNoZVxufTtcblxudmFyIFJlY29pbF9NYXBDYWNoZV8xID0gUmVjb2lsX01hcENhY2hlLk1hcENhY2hlO1xuXG52YXIgUmVjb2lsX01hcENhY2hlJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgTWFwQ2FjaGU6IFJlY29pbF9NYXBDYWNoZV8xXG59KTtcblxuY29uc3Qge1xuICBMUlVDYWNoZTogTFJVQ2FjaGUkMlxufSA9IFJlY29pbF9MUlVDYWNoZSQxO1xuXG5jb25zdCB7XG4gIE1hcENhY2hlOiBNYXBDYWNoZSQxXG59ID0gUmVjb2lsX01hcENhY2hlJDE7XG5cblxuXG5cblxuXG5cbmNvbnN0IGRlZmF1bHRQb2xpY3kkMSA9IHtcbiAgZXF1YWxpdHk6ICdyZWZlcmVuY2UnLFxuICBldmljdGlvbjogJ25vbmUnLFxuICBtYXhTaXplOiBJbmZpbml0eVxufTtcblxuZnVuY3Rpb24gY2FjaGVGcm9tUG9saWN5KHtcbiAgZXF1YWxpdHkgPSBkZWZhdWx0UG9saWN5JDEuZXF1YWxpdHksXG4gIGV2aWN0aW9uID0gZGVmYXVsdFBvbGljeSQxLmV2aWN0aW9uLFxuICBtYXhTaXplID0gZGVmYXVsdFBvbGljeSQxLm1heFNpemVcbn0gPSBkZWZhdWx0UG9saWN5JDEpIHtcbiAgY29uc3QgdmFsdWVNYXBwZXIgPSBnZXRWYWx1ZU1hcHBlciQxKGVxdWFsaXR5KTtcbiAgY29uc3QgY2FjaGUgPSBnZXRDYWNoZShldmljdGlvbiwgbWF4U2l6ZSwgdmFsdWVNYXBwZXIpO1xuICByZXR1cm4gY2FjaGU7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlTWFwcGVyJDEoZXF1YWxpdHkpIHtcbiAgc3dpdGNoIChlcXVhbGl0eSkge1xuICAgIGNhc2UgJ3JlZmVyZW5jZSc6XG4gICAgICByZXR1cm4gdmFsID0+IHZhbDtcblxuICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgIHJldHVybiB2YWwgPT4gUmVjb2lsX3N0YWJsZVN0cmluZ2lmeSh2YWwpO1xuICB9XG5cbiAgdGhyb3cgUmVjb2lsX2VycihgVW5yZWNvZ25pemVkIGVxdWFsaXR5IHBvbGljeSAke2VxdWFsaXR5fWApO1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZShldmljdGlvbiwgbWF4U2l6ZSwgbWFwS2V5KSB7XG4gIHN3aXRjaCAoZXZpY3Rpb24pIHtcbiAgICBjYXNlICdrZWVwLWFsbCc6XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICByZXR1cm4gbmV3IE1hcENhY2hlJDEoe1xuICAgICAgICBtYXBLZXlcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbHJ1JzpcbiAgICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICAgIHJldHVybiBuZXcgTFJVQ2FjaGUkMih7XG4gICAgICAgIG1hcEtleSxcbiAgICAgICAgbWF4U2l6ZTogUmVjb2lsX251bGx0aHJvd3MobWF4U2l6ZSlcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbW9zdC1yZWNlbnQnOlxuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgICAgcmV0dXJuIG5ldyBMUlVDYWNoZSQyKHtcbiAgICAgICAgbWFwS2V5LFxuICAgICAgICBtYXhTaXplOiAxXG4gICAgICB9KTtcbiAgfVxuXG4gIHRocm93IFJlY29pbF9lcnIoYFVucmVjb2duaXplZCBldmljdGlvbiBwb2xpY3kgJHtldmljdGlvbn1gKTtcbn1cblxudmFyIFJlY29pbF9jYWNoZUZyb21Qb2xpY3kgPSBjYWNoZUZyb21Qb2xpY3k7XG5cbmNvbnN0IHtcbiAgc2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyOiBzZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMlxufSA9IFJlY29pbF9Ob2RlO1xuXG5cblxuXG5cbi8vIFByb2Nlc3Mgc2NvcGVSdWxlcyB0byBoYW5kbGUgYW55IGVudHJpZXMgd2hpY2ggYXJlIGZ1bmN0aW9ucyB0YWtpbmcgcGFyYW1ldGVyc1xuLy8gcHJldHRpZXItaWdub3JlXG4vLyBAZmItb25seTogZnVuY3Rpb24gbWFwU2NvcGVSdWxlczxQPihcbi8vIEBmYi1vbmx5OiBzY29wZVJ1bGVzPzogUGFyYW1ldGVyaXplZFNjb3BlUnVsZXM8UD4sXG4vLyBAZmItb25seTogcGFyYW06IFAsXG4vLyBAZmItb25seTogKTogU2NvcGVSdWxlcyB8IHZvaWQge1xuLy8gQGZiLW9ubHk6IHJldHVybiBzY29wZVJ1bGVzPy5tYXAocnVsZSA9PlxuLy8gQGZiLW9ubHk6IEFycmF5LmlzQXJyYXkocnVsZSlcbi8vIEBmYi1vbmx5OiA/IHJ1bGUubWFwKGVudHJ5ID0+ICh0eXBlb2YgZW50cnkgPT09ICdmdW5jdGlvbicgPyBlbnRyeShwYXJhbSkgOiBlbnRyeSkpXG4vLyBAZmItb25seTogOiBydWxlLFxuLy8gQGZiLW9ubHk6ICk7XG4vLyBAZmItb25seTogfVxuXG4vKlxuQSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIGF0b20gYmFzZWQgb24gdGhlIGlucHV0IHBhcmFtZXRlci5cblxuRWFjaCB1bmlxdWUgcGFyYW1ldGVyIHJldHVybnMgYSB1bmlxdWUgYXRvbS4gRS5nLixcblxuICBjb25zdCBmID0gYXRvbUZhbWlseSguLi4pO1xuICBmKHthOiAxfSkgPT4gYW4gYXRvbVxuICBmKHthOiAyfSkgPT4gYSBkaWZmZXJlbnQgYXRvbVxuXG5UaGlzIGFsbG93cyBjb21wb25lbnRzIHRvIHBlcnNpc3QgbG9jYWwsIHByaXZhdGUgc3RhdGUgdXNpbmcgYXRvbXMuICBFYWNoXG5pbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IGtleSwgd2hpY2ggaXQgdXNlcyBhcyB0aGVcbnBhcmFtZXRlciBmb3IgYSBmYW1pbHkgb2YgYXRvbXM7IGluIHRoaXMgd2F5LCBlYWNoIGNvbXBvbmVudCB3aWxsIGhhdmVcbml0cyBvd24gYXRvbSBub3Qgc2hhcmVkIGJ5IG90aGVyIGluc3RhbmNlcy4gIFRoZXNlIHN0YXRlIGtleXMgbWF5IGJlIGNvbXBvc2VkXG5pbnRvIGNoaWxkcmVuJ3Mgc3RhdGUga2V5cyBhcyB3ZWxsLlxuKi9cbmZ1bmN0aW9uIGF0b21GYW1pbHkob3B0aW9ucykge1xuICB2YXIgX29wdGlvbnMkY2FjaGVQb2xpY3lGLCBfb3B0aW9ucyRjYWNoZVBvbGljeUYyO1xuXG4gIGNvbnN0IGF0b21DYWNoZSA9IFJlY29pbF9jYWNoZUZyb21Qb2xpY3koe1xuICAgIGVxdWFsaXR5OiAoX29wdGlvbnMkY2FjaGVQb2xpY3lGID0gKF9vcHRpb25zJGNhY2hlUG9saWN5RjIgPSBvcHRpb25zLmNhY2hlUG9saWN5Rm9yUGFyYW1zX1VOU1RBQkxFKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRjYWNoZVBvbGljeUYyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRjYWNoZVBvbGljeUYyLmVxdWFsaXR5KSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRjYWNoZVBvbGljeUYgIT09IHZvaWQgMCA/IF9vcHRpb25zJGNhY2hlUG9saWN5RiA6ICd2YWx1ZScsXG4gICAgZXZpY3Rpb246ICdrZWVwLWFsbCdcbiAgfSk7IC8vIFNpbXBsZSBhdG9tRmFtaWx5IGltcGxlbWVudGF0aW9uIHRvIGNhY2hlIGluZGl2aWR1YWwgYXRvbXMgYmFzZWRcbiAgLy8gb24gdGhlIHBhcmFtZXRlciB2YWx1ZSBlcXVhbGl0eS5cblxuICByZXR1cm4gcGFyYW1zID0+IHtcbiAgICB2YXIgX3N0YWJsZVN0cmluZ2lmeSwgX29wdGlvbnMkZWZmZWN0cztcblxuICAgIGNvbnN0IGNhY2hlZEF0b20gPSBhdG9tQ2FjaGUuZ2V0KHBhcmFtcyk7XG5cbiAgICBpZiAoY2FjaGVkQXRvbSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gY2FjaGVkQXRvbTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBjYWNoZVBvbGljeUZvclBhcmFtc19VTlNUQUJMRSxcbiAgICAgIC4uLmF0b21PcHRpb25zXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmV3QXRvbSA9IFJlY29pbF9hdG9tKHsgLi4uYXRvbU9wdGlvbnMsXG4gICAgICBrZXk6IGAke29wdGlvbnMua2V5fV9fJHsoX3N0YWJsZVN0cmluZ2lmeSA9IFJlY29pbF9zdGFibGVTdHJpbmdpZnkocGFyYW1zKSkgIT09IG51bGwgJiYgX3N0YWJsZVN0cmluZ2lmeSAhPT0gdm9pZCAwID8gX3N0YWJsZVN0cmluZ2lmeSA6ICd2b2lkJ31gLFxuICAgICAgZGVmYXVsdDogdHlwZW9mIG9wdGlvbnMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyA/IC8vIFRoZSBkZWZhdWx0IHdhcyBwYXJhbWV0ZXJpemVkXG4gICAgICAvLyBGbG93IGRvZXNuJ3Qga25vdyB0aGF0IFQgaXNuJ3QgYSBmdW5jdGlvbiwgc28gd2UgbmVlZCB0byBjYXNlIHRvIGFueVxuICAgICAgb3B0aW9ucy5kZWZhdWx0KHBhcmFtcykgLy8gZmxvd2xpbnQtbGluZSB1bmNsZWFyLXR5cGU6b2ZmXG4gICAgICA6IC8vIERlZmF1bHQgbWF5IGJlIGEgc3RhdGljIHZhbHVlLCBwcm9taXNlLCBvciBSZWNvaWxWYWx1ZVxuICAgICAgb3B0aW9ucy5kZWZhdWx0LFxuICAgICAgcmV0YWluZWRCeV9VTlNUQUJMRTogdHlwZW9mIG9wdGlvbnMucmV0YWluZWRCeV9VTlNUQUJMRSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMucmV0YWluZWRCeV9VTlNUQUJMRShwYXJhbXMpIDogb3B0aW9ucy5yZXRhaW5lZEJ5X1VOU1RBQkxFLFxuICAgICAgZWZmZWN0czogdHlwZW9mIG9wdGlvbnMuZWZmZWN0cyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZWZmZWN0cyhwYXJhbXMpIDogdHlwZW9mIG9wdGlvbnMuZWZmZWN0c19VTlNUQUJMRSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZWZmZWN0c19VTlNUQUJMRShwYXJhbXMpIDogKF9vcHRpb25zJGVmZmVjdHMgPSBvcHRpb25zLmVmZmVjdHMpICE9PSBudWxsICYmIF9vcHRpb25zJGVmZmVjdHMgIT09IHZvaWQgMCA/IF9vcHRpb25zJGVmZmVjdHMgOiBvcHRpb25zLmVmZmVjdHNfVU5TVEFCTEUgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAvLyBAZmItb25seTogc2NvcGVSdWxlc19BUFBFTkRfT05MWV9SRUFEX1RIRV9ET0NTOiBtYXBTY29wZVJ1bGVzKFxuICAgICAgLy8gQGZiLW9ubHk6IG9wdGlvbnMuc2NvcGVSdWxlc19BUFBFTkRfT05MWV9SRUFEX1RIRV9ET0NTLFxuICAgICAgLy8gQGZiLW9ubHk6IHBhcmFtcyxcbiAgICAgIC8vIEBmYi1vbmx5OiApLFxuXG4gICAgfSk7XG4gICAgYXRvbUNhY2hlLnNldChwYXJhbXMsIG5ld0F0b20pO1xuICAgIHNldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQyKG5ld0F0b20ua2V5LCAoKSA9PiB7XG4gICAgICBhdG9tQ2FjaGUuZGVsZXRlKHBhcmFtcyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0F0b207XG4gIH07XG59XG5cbnZhciBSZWNvaWxfYXRvbUZhbWlseSA9IGF0b21GYW1pbHk7XG5cbmNvbnN0IHtcbiAgc2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyOiBzZXRDb25maWdEZWxldGlvbkhhbmRsZXIkM1xufSA9IFJlY29pbF9Ob2RlO1xuXG5cblxuIC8vIEtlZXAgaW4gbWluZCB0aGUgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIHNlcmlhbGl6YWJsZSBhcyBhIGNhaGNoZSBrZXlcbi8vIHVzaW5nIFJlY29pbF9zdGFibGVTdHJpbmdpZnlcblxuXG4vLyBBZGQgYSB1bmlxdWUgaW5kZXggdG8gZWFjaCBzZWxlY3RvciBpbiBjYXNlIHRoZSBjYWNoZSBpbXBsZW1lbnRhdGlvbiBhbGxvd3Ncbi8vIGR1cGxpY2F0ZSBrZXlzIGJhc2VkIG9uIGVxdWl2YWxlbnQgc3RyaW5naWZpZWQgcGFyYW1ldGVyc1xubGV0IG5leHRJbmRleCA9IDA7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZWRlY2xhcmUgKi9cblxuLy8gUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG1lbWJlcnMgb2YgYSBmYW1pbHkgb2Ygc2VsZWN0b3JzIG9mIHRoZSBzYW1lIHR5cGVcbi8vIEUuZy4sXG4vL1xuLy8gY29uc3QgcyA9IHNlbGVjdG9yRmFtaWx5KC4uLik7XG4vLyBzKHthOiAxfSkgPT4gYSBzZWxlY3RvclxuLy8gcyh7YTogMn0pID0+IGEgZGlmZmVyZW50IHNlbGVjdG9yXG4vL1xuLy8gQnkgZGVmYXVsdCwgdGhlIHNlbGVjdG9ycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBkaXN0aW5jdCB2YWx1ZXMgb2YgdGhlXG4vLyBwYXJhbWV0ZXIgYmFzZWQgb24gdmFsdWUgZXF1YWxpdHksIG5vdCByZWZlcmVuY2UgZXF1YWxpdHkuICBUaGlzIGFsbG93cyB1c2luZ1xuLy8gb2JqZWN0IGxpdGVyYWxzIG9yIG90aGVyIGVxdWl2YWxlbnQgb2JqZWN0cyBhdCBjYWxsc2l0ZXMgdG8gbm90IGNyZWF0ZVxuLy8gZHVwbGljYXRlIGNhY2hlIGVudHJpZXMuICBUaGlzIGJlaGF2aW9yIG1heSBiZSBvdmVycmlkZGVuIHdpdGggdGhlXG4vLyBjYWNoZUltcGxlbWVudGF0aW9uRm9yUGFyYW1zIG9wdGlvbi5cbmZ1bmN0aW9uIHNlbGVjdG9yRmFtaWx5KG9wdGlvbnMpIHtcbiAgdmFyIF9vcHRpb25zJGNhY2hlUG9saWN5RiwgX29wdGlvbnMkY2FjaGVQb2xpY3lGMjtcblxuICBjb25zdCBzZWxlY3RvckNhY2hlID0gUmVjb2lsX2NhY2hlRnJvbVBvbGljeSh7XG4gICAgZXF1YWxpdHk6IChfb3B0aW9ucyRjYWNoZVBvbGljeUYgPSAoX29wdGlvbnMkY2FjaGVQb2xpY3lGMiA9IG9wdGlvbnMuY2FjaGVQb2xpY3lGb3JQYXJhbXNfVU5TVEFCTEUpID09PSBudWxsIHx8IF9vcHRpb25zJGNhY2hlUG9saWN5RjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGNhY2hlUG9saWN5RjIuZXF1YWxpdHkpICE9PSBudWxsICYmIF9vcHRpb25zJGNhY2hlUG9saWN5RiAhPT0gdm9pZCAwID8gX29wdGlvbnMkY2FjaGVQb2xpY3lGIDogJ3ZhbHVlJyxcbiAgICBldmljdGlvbjogJ2tlZXAtYWxsJ1xuICB9KTtcbiAgcmV0dXJuIHBhcmFtcyA9PiB7XG4gICAgdmFyIF9zdGFibGVTdHJpbmdpZnk7XG5cbiAgICBjb25zdCBjYWNoZWRTZWxlY3RvciA9IHNlbGVjdG9yQ2FjaGUuZ2V0KHBhcmFtcyk7XG5cbiAgICBpZiAoY2FjaGVkU2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdG9yO1xuICAgIH1cblxuICAgIGNvbnN0IG15S2V5ID0gYCR7b3B0aW9ucy5rZXl9X19zZWxlY3RvckZhbWlseS8keyhfc3RhYmxlU3RyaW5naWZ5ID0gUmVjb2lsX3N0YWJsZVN0cmluZ2lmeShwYXJhbXMsIHtcbiAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBmdW5jdGlvbnMgaW4gcGFyYW1ldGVycyBpZiB0aGUgdXNlciB1c2VzXG4gICAgICAvLyBhIGNhY2hlIHdpdGggcmVmZXJlbmNlIGVxdWFsaXR5IHRoYW5rcyB0byB0aGUgaW5jcmVtZW50aW5nIGluZGV4LlxuICAgICAgYWxsb3dGdW5jdGlvbnM6IHRydWVcbiAgICB9KSkgIT09IG51bGwgJiYgX3N0YWJsZVN0cmluZ2lmeSAhPT0gdm9pZCAwID8gX3N0YWJsZVN0cmluZ2lmeSA6ICd2b2lkJ30vJHtuZXh0SW5kZXgrK31gOyAvLyBBcHBlbmQgaW5kZXggaW4gY2FzZSB2YWx1ZXMgc2VyaWFsaXplIHRvIHRoZSBzYW1lIGtleSBzdHJpbmdcblxuICAgIGNvbnN0IG15R2V0ID0gY2FsbGJhY2tzID0+IG9wdGlvbnMuZ2V0KHBhcmFtcykoY2FsbGJhY2tzKTtcblxuICAgIGNvbnN0IG15Q2FjaGVQb2xpY3kgPSBvcHRpb25zLmNhY2hlUG9saWN5X1VOU1RBQkxFO1xuICAgIGNvbnN0IHJldGFpbmVkQnkgPSB0eXBlb2Ygb3B0aW9ucy5yZXRhaW5lZEJ5X1VOU1RBQkxFID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5yZXRhaW5lZEJ5X1VOU1RBQkxFKHBhcmFtcykgOiBvcHRpb25zLnJldGFpbmVkQnlfVU5TVEFCTEU7XG4gICAgbGV0IG5ld1NlbGVjdG9yO1xuXG4gICAgaWYgKG9wdGlvbnMuc2V0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHNldCA9IG9wdGlvbnMuc2V0O1xuXG4gICAgICBjb25zdCBteVNldCA9IChjYWxsYmFja3MsIG5ld1ZhbHVlKSA9PiBzZXQocGFyYW1zKShjYWxsYmFja3MsIG5ld1ZhbHVlKTtcblxuICAgICAgbmV3U2VsZWN0b3IgPSBSZWNvaWxfc2VsZWN0b3Ioe1xuICAgICAgICBrZXk6IG15S2V5LFxuICAgICAgICBnZXQ6IG15R2V0LFxuICAgICAgICBzZXQ6IG15U2V0LFxuICAgICAgICBjYWNoZVBvbGljeV9VTlNUQUJMRTogbXlDYWNoZVBvbGljeSxcbiAgICAgICAgZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHk6IG9wdGlvbnMuZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHksXG4gICAgICAgIHJldGFpbmVkQnlfVU5TVEFCTEU6IHJldGFpbmVkQnlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZWxlY3RvciA9IFJlY29pbF9zZWxlY3Rvcih7XG4gICAgICAgIGtleTogbXlLZXksXG4gICAgICAgIGdldDogbXlHZXQsXG4gICAgICAgIGNhY2hlUG9saWN5X1VOU1RBQkxFOiBteUNhY2hlUG9saWN5LFxuICAgICAgICBkYW5nZXJvdXNseUFsbG93TXV0YWJpbGl0eTogb3B0aW9ucy5kYW5nZXJvdXNseUFsbG93TXV0YWJpbGl0eSxcbiAgICAgICAgcmV0YWluZWRCeV9VTlNUQUJMRTogcmV0YWluZWRCeVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0b3JDYWNoZS5zZXQocGFyYW1zLCBuZXdTZWxlY3Rvcik7XG4gICAgc2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyJDMobmV3U2VsZWN0b3Iua2V5LCAoKSA9PiB7XG4gICAgICBzZWxlY3RvckNhY2hlLmRlbGV0ZShwYXJhbXMpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdTZWxlY3RvcjtcbiAgfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tcmVkZWNsYXJlICovXG5cblxudmFyIFJlY29pbF9zZWxlY3RvckZhbWlseSA9IHNlbGVjdG9yRmFtaWx5O1xuXG4vLyBmbG93bGludC1uZXh0LWxpbmUgdW5jbGVhci10eXBlOm9mZlxuXG5cbmNvbnN0IGNvbnN0YW50U2VsZWN0b3IgPSBSZWNvaWxfc2VsZWN0b3JGYW1pbHkoe1xuICBrZXk6ICdfX2NvbnN0YW50JyxcbiAgZ2V0OiBjb25zdGFudCA9PiAoKSA9PiBjb25zdGFudCxcbiAgY2FjaGVQb2xpY3lGb3JQYXJhbXNfVU5TVEFCTEU6IHtcbiAgICBlcXVhbGl0eTogJ3JlZmVyZW5jZSdcbiAgfVxufSk7IC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHNlbGVjdG9yIHdoaWNoIGFsd2F5cyBwcm9kdWNlcyB0aGVcbi8vIHNhbWUgY29uc3RhbnQgdmFsdWUuICBJdCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlXG4vLyBzYW1lIHZhbHVlLCBiYXNlZCBvbiByZWZlcmVuY2UgZXF1YWxpdHksIGFuZCB3aWxsIHByb3ZpZGUgdGhlXG4vLyBzYW1lIHNlbGVjdG9yLlxuXG5mdW5jdGlvbiBjb25zdFNlbGVjdG9yKGNvbnN0YW50KSB7XG4gIHJldHVybiBjb25zdGFudFNlbGVjdG9yKGNvbnN0YW50KTtcbn1cblxudmFyIFJlY29pbF9jb25zdFNlbGVjdG9yID0gY29uc3RTZWxlY3RvcjtcblxuLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVuY2xlYXItdHlwZTpvZmZcblxuXG5jb25zdCB0aHJvd2luZ1NlbGVjdG9yID0gUmVjb2lsX3NlbGVjdG9yRmFtaWx5KHtcbiAga2V5OiAnX19lcnJvcicsXG4gIGdldDogbWVzc2FnZSA9PiAoKSA9PiB7XG4gICAgdGhyb3cgUmVjb2lsX2VycihtZXNzYWdlKTtcbiAgfSxcbiAgLy8gVE9ETyBXaHk/XG4gIGNhY2hlUG9saWN5Rm9yUGFyYW1zX1VOU1RBQkxFOiB7XG4gICAgZXF1YWxpdHk6ICdyZWZlcmVuY2UnXG4gIH1cbn0pOyAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzZWxlY3RvciB3aGljaCBhbHdheXMgdGhyb3dzIGFuIGVycm9yXG4vLyB3aXRoIHRoZSBwcm92aWRlZCBtZXNzYWdlLlxuXG5mdW5jdGlvbiBlcnJvclNlbGVjdG9yKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIHRocm93aW5nU2VsZWN0b3IobWVzc2FnZSk7XG59XG5cbnZhciBSZWNvaWxfZXJyb3JTZWxlY3RvciA9IGVycm9yU2VsZWN0b3I7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogV3JhcHMgYW5vdGhlciByZWNvaWwgdmFsdWUgYW5kIHByZXZlbnRzIHdyaXRpbmcgdG8gaXQuXG4gKlxuICogQGVtYWlscyBvbmNhbGwrcmVjb2lsXG4gKiBcbiAqIEBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiByZWFkT25seVNlbGVjdG9yKGF0b20pIHtcbiAgLy8gZmxvd2xpbnQtbmV4dC1saW5lIHVuY2xlYXItdHlwZTogb2ZmXG4gIHJldHVybiBhdG9tO1xufVxuXG52YXIgUmVjb2lsX3JlYWRPbmx5U2VsZWN0b3IgPSByZWFkT25seVNlbGVjdG9yO1xuXG5jb25zdCB7XG4gIGxvYWRhYmxlV2l0aEVycm9yOiBsb2FkYWJsZVdpdGhFcnJvciQzLFxuICBsb2FkYWJsZVdpdGhQcm9taXNlOiBsb2FkYWJsZVdpdGhQcm9taXNlJDMsXG4gIGxvYWRhYmxlV2l0aFZhbHVlOiBsb2FkYWJsZVdpdGhWYWx1ZSQ0XG59ID0gUmVjb2lsX0xvYWRhYmxlJDE7XG5cblxuXG4gLy8vLy8vLy8vLy8vLy8vLy9cbi8vICBUUlVUSCBUQUJMRVxuLy8vLy8vLy8vLy8vLy8vLy9cbi8vIERlcGVuZGVuY2llcyAgICAgICAgd2FpdEZvck5vbmUgICAgICAgICB3YWl0Rm9yQW55ICAgICAgICB3YWl0Rm9yQWxsICAgICAgIHdhaXRGb3JBbGxTZXR0bGVkXG4vLyAgW2xvYWRpbmcsIGxvYWRpbmddICBbUHJvbWlzZSwgUHJvbWlzZV0gIFByb21pc2UgICAgICAgICAgIFByb21pc2UgICAgICAgICBQcm9taXNlXG4vLyAgW3ZhbHVlLCBsb2FkaW5nXSAgICBbdmFsdWUsIFByb21pc2VdICAgIFt2YWx1ZSwgUHJvbWlzZV0gIFByb21pc2UgICAgICAgICBQcm9taXNlXG4vLyAgW3ZhbHVlLCB2YWx1ZV0gICAgICBbdmFsdWUsIHZhbHVlXSAgICAgIFt2YWx1ZSwgdmFsdWVdICAgIFt2YWx1ZSwgdmFsdWVdICBbdmFsdWUsIHZhbHVlXVxuLy9cbi8vICBbZXJyb3IsIGxvYWRpbmddICAgIFtFcnJvciwgUHJvbWlzZV0gICAgW0Vycm9yLCBQcm9taXNlXSAgRXJyb3IgICAgICAgICAgIFByb21pc2Vcbi8vICBbZXJyb3IsIGVycm9yXSAgICAgIFtFcnJvciwgRXJyb3JdICAgICAgW0Vycm9yLCBFcnJvcl0gICAgRXJyb3IgICAgICAgICAgIFtlcnJvciwgZXJyb3JdXG4vLyAgW3ZhbHVlLCBlcnJvcl0gICAgICBbdmFsdWUsIEVycm9yXSAgICAgIFt2YWx1ZSwgRXJyb3JdICAgIEVycm9yICAgICAgICAgICBbdmFsdWUsIGVycm9yXVxuLy8gSXNzdWUgcGFyYWxsZWwgcmVxdWVzdHMgZm9yIGFsbCBkZXBlbmRlbmNpZXMgYW5kIHJldHVybiB0aGUgY3VycmVudFxuLy8gc3RhdHVzIGlmIHRoZXkgaGF2ZSByZXN1bHRzLCBoYXZlIHNvbWUgZXJyb3IsIG9yIGFyZSBzdGlsbCBwZW5kaW5nLlxuXG5cbmZ1bmN0aW9uIGNvbmN1cnJlbnRSZXF1ZXN0cyhnZXRSZWNvaWxWYWx1ZSwgZGVwcykge1xuICBjb25zdCByZXN1bHRzID0gQXJyYXkoZGVwcy5sZW5ndGgpLmZpbGwodW5kZWZpbmVkKTtcbiAgY29uc3QgZXhjZXB0aW9ucyA9IEFycmF5KGRlcHMubGVuZ3RoKS5maWxsKHVuZGVmaW5lZCk7XG5cbiAgZm9yIChjb25zdCBbaSwgZGVwXSBvZiBkZXBzLmVudHJpZXMoKSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHRzW2ldID0gZ2V0UmVjb2lsVmFsdWUoZGVwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBleGNlcHRpb25zIGNhbiBlaXRoZXIgYmUgUHJvbWlzZXMgb2YgcGVuZGluZyByZXN1bHRzIG9yIHJlYWwgZXJyb3JzXG4gICAgICBleGNlcHRpb25zW2ldID0gZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdHMsIGV4Y2VwdGlvbnNdO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKGV4cCkge1xuICByZXR1cm4gZXhwICE9IG51bGwgJiYgIVJlY29pbF9pc1Byb21pc2UoZXhwKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkZXBlbmRlbmNpZXMpID8gZGVwZW5kZW5jaWVzIDogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGVwZW5kZW5jaWVzKS5tYXAoa2V5ID0+IGRlcGVuZGVuY2llc1trZXldKTtcbn1cblxuZnVuY3Rpb24gd3JhcFJlc3VsdHMoZGVwZW5kZW5jaWVzLCByZXN1bHRzKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRlcGVuZGVuY2llcykgPyByZXN1bHRzIDogLy8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoKSBoYXMgY29uc2lzdGVudCBrZXkgb3JkZXJpbmcgd2l0aCBFUzZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGVwZW5kZW5jaWVzKS5yZWR1Y2UoKG91dCwga2V5LCBpZHgpID0+ICh7IC4uLm91dCxcbiAgICBba2V5XTogcmVzdWx0c1tpZHhdXG4gIH0pLCB7fSk7XG59XG5cbmZ1bmN0aW9uIHdyYXBMb2FkYWJsZXMoZGVwZW5kZW5jaWVzLCByZXN1bHRzLCBleGNlcHRpb25zKSB7XG4gIGNvbnN0IG91dHB1dCA9IGV4Y2VwdGlvbnMubWFwKChleGNlcHRpb24sIGlkeCkgPT4gZXhjZXB0aW9uID09IG51bGwgPyBsb2FkYWJsZVdpdGhWYWx1ZSQ0KHJlc3VsdHNbaWR4XSkgOiBSZWNvaWxfaXNQcm9taXNlKGV4Y2VwdGlvbikgPyBsb2FkYWJsZVdpdGhQcm9taXNlJDMoZXhjZXB0aW9uKSA6IGxvYWRhYmxlV2l0aEVycm9yJDMoZXhjZXB0aW9uKSk7XG4gIHJldHVybiB3cmFwUmVzdWx0cyhkZXBlbmRlbmNpZXMsIG91dHB1dCk7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBc3luY1Jlc3VsdHNXaXRoU3luY1Jlc3VsdHMoc3luY1Jlc3VsdHMsIGFzeW5jUmVzdWx0cykge1xuICByZXR1cm4gYXN5bmNSZXN1bHRzLm1hcCgocmVzdWx0LCBpZHgpID0+XG4gIC8qKlxuICAgKiBpdCdzIGltcG9ydGFudCB3ZSB1c2UgPT09IHVuZGVmaW5lZCBhcyBvcHBvc2VkIHRvID09IG51bGwsIGJlY2F1c2UgdGhlXG4gICAqIHJlc29sdmVkIHZhbHVlIG9mIHRoZSBhc3luYyBwcm9taXNlIGNvdWxkIGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSB3ZVxuICAgKiBkb24ndCB3YW50IHRvIHVzZSBzeW5jUmVzdWx0c1tpZHhdLCB3aGljaCB3b3VsZCBiZSB1bmRlZmluZWQuIElmIGFzeW5jXG4gICAqIHByb21pc2UgcmVzb2x2ZXMgdG8gYHVuZGVmaW5lZGAsIHRoYXQncyBvayBiZWNhdXNlIGBzeW5jUmVzdWx0c1tpZHhdYFxuICAgKiB3aWxsIGFsc28gYmUgYHVuZGVmaW5lZGAuIFRoYXQncyBhIGxpdHRsZSBoYWNreSwgYnV0IGl0IHdvcmtzLlxuICAgKi9cbiAgcmVzdWx0ID09PSB1bmRlZmluZWQgPyBzeW5jUmVzdWx0c1tpZHhdIDogcmVzdWx0KTtcbn0gLy8gU2VsZWN0b3IgdGhhdCByZXF1ZXN0cyBhbGwgZGVwZW5kZW5jaWVzIGluIHBhcmFsbGVsIGFuZCBpbW1lZGlhdGVseSByZXR1cm5zXG4vLyBjdXJyZW50IHJlc3VsdHMgd2l0aG91dCB3YWl0aW5nLlxuXG5cbmNvbnN0IHdhaXRGb3JOb25lID0gUmVjb2lsX3NlbGVjdG9yRmFtaWx5KHtcbiAga2V5OiAnX193YWl0Rm9yTm9uZScsXG4gIGdldDogZGVwZW5kZW5jaWVzID0+ICh7XG4gICAgZ2V0XG4gIH0pID0+IHtcbiAgICAvLyBJc3N1ZSByZXF1ZXN0cyBmb3IgYWxsIGRlcGVuZGVuY2llcyBpbiBwYXJhbGxlbC5cbiAgICBjb25zdCBkZXBzID0gdW53cmFwRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7XG4gICAgY29uc3QgW3Jlc3VsdHMsIGV4Y2VwdGlvbnNdID0gY29uY3VycmVudFJlcXVlc3RzKGdldCwgZGVwcyk7IC8vIEFsd2F5cyByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSByZXN1bHRzOyBuZXZlciBibG9jay5cblxuICAgIHJldHVybiB3cmFwTG9hZGFibGVzKGRlcGVuZGVuY2llcywgcmVzdWx0cywgZXhjZXB0aW9ucyk7XG4gIH0sXG4gIGRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5OiB0cnVlXG59KTsgLy8gU2VsZWN0b3IgdGhhdCByZXF1ZXN0cyBhbGwgZGVwZW5kZW5jaWVzIGluIHBhcmFsbGVsIGFuZCB3YWl0cyBmb3IgYXQgbGVhc3Rcbi8vIG9uZSB0byBiZSBhdmFpbGFibGUgYmVmb3JlIHJldHVybmluZyByZXN1bHRzLiAgSXQgd2lsbCBvbmx5IGVycm9yIGlmIGFsbFxuLy8gZGVwZW5kZW5jaWVzIGhhdmUgZXJyb3JzLlxuXG5jb25zdCB3YWl0Rm9yQW55ID0gUmVjb2lsX3NlbGVjdG9yRmFtaWx5KHtcbiAga2V5OiAnX193YWl0Rm9yQW55JyxcbiAgZ2V0OiBkZXBlbmRlbmNpZXMgPT4gKHtcbiAgICBnZXRcbiAgfSkgPT4ge1xuICAgIC8vIElzc3VlIHJlcXVlc3RzIGZvciBhbGwgZGVwZW5kZW5jaWVzIGluIHBhcmFsbGVsLlxuICAgIC8vIEV4Y2VwdGlvbnMgY2FuIGVpdGhlciBiZSBQcm9taXNlcyBvZiBwZW5kaW5nIHJlc3VsdHMgb3IgcmVhbCBlcnJvcnNcbiAgICBjb25zdCBkZXBzID0gdW53cmFwRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7XG4gICAgY29uc3QgW3Jlc3VsdHMsIGV4Y2VwdGlvbnNdID0gY29uY3VycmVudFJlcXVlc3RzKGdldCwgZGVwcyk7IC8vIElmIGFueSByZXN1bHRzIGFyZSBhdmFpbGFibGUsIHZhbHVlIG9yIGVycm9yLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHVzXG5cbiAgICBpZiAoZXhjZXB0aW9ucy5zb21lKGV4cCA9PiAhUmVjb2lsX2lzUHJvbWlzZShleHApKSkge1xuICAgICAgcmV0dXJuIHdyYXBMb2FkYWJsZXMoZGVwZW5kZW5jaWVzLCByZXN1bHRzLCBleGNlcHRpb25zKTtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBuZXh0IHJlc3VsdCBpc1xuICAgIC8vIGF2YWlsYWJsZSwgd2hpY2hldmVyIG9uZSBoYXBwZW5zIHRvIGJlIG5leHQuICBCdXQsIGlmIGFsbCBwZW5kaW5nXG4gICAgLy8gZGVwZW5kZW5jaWVzIGVuZCB1cCB3aXRoIGVycm9ycywgdGhlbiByZWplY3QgdGhlIHByb21pc2UuXG5cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGZvciAoY29uc3QgW2ksIGV4cF0gb2YgZXhjZXB0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKFJlY29pbF9pc1Byb21pc2UoZXhwKSkge1xuICAgICAgICAgIGV4cC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICByZXN1bHRzW2ldID0gcmVzdWx0O1xuICAgICAgICAgICAgZXhjZXB0aW9uc1tpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc29sdmUod3JhcExvYWRhYmxlcyhkZXBlbmRlbmNpZXMsIHJlc3VsdHMsIGV4Y2VwdGlvbnMpKTtcbiAgICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBleGNlcHRpb25zW2ldID0gZXJyb3I7XG4gICAgICAgICAgICByZXNvbHZlKHdyYXBMb2FkYWJsZXMoZGVwZW5kZW5jaWVzLCByZXN1bHRzLCBleGNlcHRpb25zKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgZGFuZ2Vyb3VzbHlBbGxvd011dGFiaWxpdHk6IHRydWVcbn0pOyAvLyBTZWxlY3RvciB0aGF0IHJlcXVlc3RzIGFsbCBkZXBlbmRlbmNpZXMgaW4gcGFyYWxsZWwgYW5kIHdhaXRzIGZvciBhbGwgdG8gYmVcbi8vIGF2YWlsYWJsZSBiZWZvcmUgcmV0dXJuaW5nIGEgdmFsdWUuICBJdCB3aWxsIGVycm9yIGlmIGFueSBkZXBlbmRlbmNpZXMgZXJyb3IuXG5cbmNvbnN0IHdhaXRGb3JBbGwgPSBSZWNvaWxfc2VsZWN0b3JGYW1pbHkoe1xuICBrZXk6ICdfX3dhaXRGb3JBbGwnLFxuICBnZXQ6IGRlcGVuZGVuY2llcyA9PiAoe1xuICAgIGdldFxuICB9KSA9PiB7XG4gICAgLy8gSXNzdWUgcmVxdWVzdHMgZm9yIGFsbCBkZXBlbmRlbmNpZXMgaW4gcGFyYWxsZWwuXG4gICAgLy8gRXhjZXB0aW9ucyBjYW4gZWl0aGVyIGJlIFByb21pc2VzIG9mIHBlbmRpbmcgcmVzdWx0cyBvciByZWFsIGVycm9yc1xuICAgIGNvbnN0IGRlcHMgPSB1bndyYXBEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcbiAgICBjb25zdCBbcmVzdWx0cywgZXhjZXB0aW9uc10gPSBjb25jdXJyZW50UmVxdWVzdHMoZ2V0LCBkZXBzKTsgLy8gSWYgYWxsIHJlc3VsdHMgYXJlIGF2YWlsYWJsZSwgcmV0dXJuIHRoZSByZXN1bHRzXG5cbiAgICBpZiAoZXhjZXB0aW9ucy5ldmVyeShleHAgPT4gZXhwID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gd3JhcFJlc3VsdHMoZGVwZW5kZW5jaWVzLCByZXN1bHRzKTtcbiAgICB9IC8vIElmIHdlIGhhdmUgYW55IGVycm9ycywgdGhyb3cgdGhlIGZpcnN0IGVycm9yXG5cblxuICAgIGNvbnN0IGVycm9yID0gZXhjZXB0aW9ucy5maW5kKGlzRXJyb3IpO1xuXG4gICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIHdoZW4gYWxsIHJlc3VsdHMgYXJlIGF2YWlsYWJsZVxuXG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZXhjZXB0aW9ucykudGhlbihleGNlcHRpb25SZXN1bHRzID0+IHdyYXBSZXN1bHRzKGRlcGVuZGVuY2llcywgY29tYmluZUFzeW5jUmVzdWx0c1dpdGhTeW5jUmVzdWx0cyhyZXN1bHRzLCBleGNlcHRpb25SZXN1bHRzKSkpO1xuICB9LFxuICBkYW5nZXJvdXNseUFsbG93TXV0YWJpbGl0eTogdHJ1ZVxufSk7XG5jb25zdCB3YWl0Rm9yQWxsU2V0dGxlZCA9IFJlY29pbF9zZWxlY3RvckZhbWlseSh7XG4gIGtleTogJ19fd2FpdEZvckFsbFNldHRsZWQnLFxuICBnZXQ6IGRlcGVuZGVuY2llcyA9PiAoe1xuICAgIGdldFxuICB9KSA9PiB7XG4gICAgLy8gSXNzdWUgcmVxdWVzdHMgZm9yIGFsbCBkZXBlbmRlbmNpZXMgaW4gcGFyYWxsZWwuXG4gICAgLy8gRXhjZXB0aW9ucyBjYW4gZWl0aGVyIGJlIFByb21pc2VzIG9mIHBlbmRpbmcgcmVzdWx0cyBvciByZWFsIGVycm9yc1xuICAgIGNvbnN0IGRlcHMgPSB1bndyYXBEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcbiAgICBjb25zdCBbcmVzdWx0cywgZXhjZXB0aW9uc10gPSBjb25jdXJyZW50UmVxdWVzdHMoZ2V0LCBkZXBzKTsgLy8gSWYgYWxsIHJlc3VsdHMgYXJlIGF2YWlsYWJsZSwgcmV0dXJuIHRoZSByZXN1bHRzXG5cbiAgICBpZiAoZXhjZXB0aW9ucy5ldmVyeShleHAgPT4gIVJlY29pbF9pc1Byb21pc2UoZXhwKSkpIHtcbiAgICAgIHJldHVybiB3cmFwTG9hZGFibGVzKGRlcGVuZGVuY2llcywgcmVzdWx0cywgZXhjZXB0aW9ucyk7XG4gICAgfSAvLyBXYWl0IGZvciBhbGwgcmVzdWx0cyB0byBzZXR0bGVcblxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGV4Y2VwdGlvbnMubWFwKChleHAsIGkpID0+IFJlY29pbF9pc1Byb21pc2UoZXhwKSA/IGV4cC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN1bHRzW2ldID0gcmVzdWx0O1xuICAgICAgZXhjZXB0aW9uc1tpXSA9IHVuZGVmaW5lZDtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICByZXN1bHRzW2ldID0gdW5kZWZpbmVkO1xuICAgICAgZXhjZXB0aW9uc1tpXSA9IGVycm9yO1xuICAgIH0pIDogbnVsbCkpIC8vIFRoZW4gd3JhcCB0aGVtIGFzIGxvYWRhYmxlc1xuICAgIC50aGVuKCgpID0+IHdyYXBMb2FkYWJsZXMoZGVwZW5kZW5jaWVzLCByZXN1bHRzLCBleGNlcHRpb25zKSk7XG4gIH0sXG4gIGRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5OiB0cnVlXG59KTtcbmNvbnN0IG5vV2FpdCA9IFJlY29pbF9zZWxlY3RvckZhbWlseSh7XG4gIGtleTogJ19fbm9XYWl0JyxcbiAgZ2V0OiBkZXBlbmRlbmN5ID0+ICh7XG4gICAgZ2V0XG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGxvYWRhYmxlV2l0aFZhbHVlJDQoZ2V0KGRlcGVuZGVuY3kpKTtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBSZWNvaWxfaXNQcm9taXNlKGV4Y2VwdGlvbikgPyBsb2FkYWJsZVdpdGhQcm9taXNlJDMoZXhjZXB0aW9uKSA6IGxvYWRhYmxlV2l0aEVycm9yJDMoZXhjZXB0aW9uKTtcbiAgICB9XG4gIH0sXG4gIGRhbmdlcm91c2x5QWxsb3dNdXRhYmlsaXR5OiB0cnVlXG59KTtcbnZhciBSZWNvaWxfV2FpdEZvciA9IHtcbiAgd2FpdEZvck5vbmUsXG4gIHdhaXRGb3JBbnksXG4gIHdhaXRGb3JBbGwsXG4gIHdhaXRGb3JBbGxTZXR0bGVkLFxuICBub1dhaXRcbn07XG5cbmNvbnN0IHtcbiAgUmVjb2lsTG9hZGFibGVcbn0gPSBSZWNvaWxfTG9hZGFibGUkMTtcblxuY29uc3Qge1xuICBEZWZhdWx0VmFsdWU6IERlZmF1bHRWYWx1ZSQzXG59ID0gUmVjb2lsX05vZGU7XG5cbmNvbnN0IHtcbiAgUmVjb2lsUm9vdDogUmVjb2lsUm9vdCQyLFxuICB1c2VSZWNvaWxTdG9yZUlEOiB1c2VSZWNvaWxTdG9yZUlEJDFcbn0gPSBSZWNvaWxfUmVjb2lsUm9vdDtcblxuY29uc3Qge1xuICBpc1JlY29pbFZhbHVlOiBpc1JlY29pbFZhbHVlJDVcbn0gPSBSZWNvaWxfUmVjb2lsVmFsdWUkMTtcblxuY29uc3Qge1xuICByZXRlbnRpb25ab25lOiByZXRlbnRpb25ab25lJDFcbn0gPSBSZWNvaWxfUmV0ZW50aW9uWm9uZTtcblxuY29uc3Qge1xuICBmcmVzaFNuYXBzaG90OiBmcmVzaFNuYXBzaG90JDJcbn0gPSBSZWNvaWxfU25hcHNob3QkMTtcblxuY29uc3Qge1xuICB1c2VSZWNvaWxTdGF0ZTogdXNlUmVjb2lsU3RhdGUkMSxcbiAgdXNlUmVjb2lsU3RhdGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFOiB1c2VSZWNvaWxTdGF0ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUkMSxcbiAgdXNlUmVjb2lsU3RhdGVMb2FkYWJsZTogdXNlUmVjb2lsU3RhdGVMb2FkYWJsZSQxLFxuICB1c2VSZWNvaWxWYWx1ZTogdXNlUmVjb2lsVmFsdWUkMSxcbiAgdXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFOiB1c2VSZWNvaWxWYWx1ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUkMSxcbiAgdXNlUmVjb2lsVmFsdWVMb2FkYWJsZTogdXNlUmVjb2lsVmFsdWVMb2FkYWJsZSQxLFxuICB1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRTogdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEUkMSxcbiAgdXNlUmVzZXRSZWNvaWxTdGF0ZTogdXNlUmVzZXRSZWNvaWxTdGF0ZSQxLFxuICB1c2VTZXRSZWNvaWxTdGF0ZTogdXNlU2V0UmVjb2lsU3RhdGUkMVxufSA9IFJlY29pbF9Ib29rcztcblxuY29uc3Qge1xuICB1c2VHb3RvUmVjb2lsU25hcHNob3Q6IHVzZUdvdG9SZWNvaWxTbmFwc2hvdCQxLFxuICB1c2VSZWNvaWxTbmFwc2hvdDogdXNlUmVjb2lsU25hcHNob3QkMSxcbiAgdXNlUmVjb2lsVHJhbnNhY3Rpb25PYnNlcnZlcjogdXNlUmVjb2lsVHJhbnNhY3Rpb25PYnNlcnZlciQxXG59ID0gUmVjb2lsX1NuYXBzaG90SG9va3M7XG5cblxuXG5cblxuY29uc3Qge1xuICB1c2VSZWNvaWxDYWxsYmFjazogdXNlUmVjb2lsQ2FsbGJhY2skMVxufSA9IFJlY29pbF91c2VSZWNvaWxDYWxsYmFjaztcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IHtcbiAgbm9XYWl0OiBub1dhaXQkMSxcbiAgd2FpdEZvckFsbDogd2FpdEZvckFsbCQxLFxuICB3YWl0Rm9yQWxsU2V0dGxlZDogd2FpdEZvckFsbFNldHRsZWQkMSxcbiAgd2FpdEZvckFueTogd2FpdEZvckFueSQxLFxuICB3YWl0Rm9yTm9uZTogd2FpdEZvck5vbmUkMVxufSA9IFJlY29pbF9XYWl0Rm9yO1xuXG52YXIgUmVjb2lsX2luZGV4ID0ge1xuICAvLyBUeXBlc1xuICBEZWZhdWx0VmFsdWU6IERlZmF1bHRWYWx1ZSQzLFxuICBpc1JlY29pbFZhbHVlOiBpc1JlY29pbFZhbHVlJDUsXG4gIFJlY29pbExvYWRhYmxlLFxuICAvLyBSZWNvaWwgUm9vdFxuICBSZWNvaWxSb290OiBSZWNvaWxSb290JDIsXG4gIHVzZVJlY29pbFN0b3JlSUQ6IHVzZVJlY29pbFN0b3JlSUQkMSxcbiAgdXNlUmVjb2lsQnJpZGdlQWNyb3NzUmVhY3RSb290c19VTlNUQUJMRTogUmVjb2lsX3VzZVJlY29pbEJyaWRnZUFjcm9zc1JlYWN0Um9vdHMsXG4gIC8vIEF0b21zL1NlbGVjdG9yc1xuICBhdG9tOiBSZWNvaWxfYXRvbSxcbiAgc2VsZWN0b3I6IFJlY29pbF9zZWxlY3RvcixcbiAgLy8gQ29udmVuaWVuY2UgQXRvbXMvU2VsZWN0b3JzXG4gIGF0b21GYW1pbHk6IFJlY29pbF9hdG9tRmFtaWx5LFxuICBzZWxlY3RvckZhbWlseTogUmVjb2lsX3NlbGVjdG9yRmFtaWx5LFxuICBjb25zdFNlbGVjdG9yOiBSZWNvaWxfY29uc3RTZWxlY3RvcixcbiAgZXJyb3JTZWxlY3RvcjogUmVjb2lsX2Vycm9yU2VsZWN0b3IsXG4gIHJlYWRPbmx5U2VsZWN0b3I6IFJlY29pbF9yZWFkT25seVNlbGVjdG9yLFxuICAvLyBDb25jdXJyZW5jeSBIZWxwZXJzIGZvciBBdG9tcy9TZWxlY3RvcnNcbiAgbm9XYWl0OiBub1dhaXQkMSxcbiAgd2FpdEZvck5vbmU6IHdhaXRGb3JOb25lJDEsXG4gIHdhaXRGb3JBbnk6IHdhaXRGb3JBbnkkMSxcbiAgd2FpdEZvckFsbDogd2FpdEZvckFsbCQxLFxuICB3YWl0Rm9yQWxsU2V0dGxlZDogd2FpdEZvckFsbFNldHRsZWQkMSxcbiAgLy8gSG9va3MgZm9yIEF0b21zL1NlbGVjdG9yc1xuICB1c2VSZWNvaWxWYWx1ZTogdXNlUmVjb2lsVmFsdWUkMSxcbiAgdXNlUmVjb2lsVmFsdWVMb2FkYWJsZTogdXNlUmVjb2lsVmFsdWVMb2FkYWJsZSQxLFxuICB1c2VSZWNvaWxTdGF0ZTogdXNlUmVjb2lsU3RhdGUkMSxcbiAgdXNlUmVjb2lsU3RhdGVMb2FkYWJsZTogdXNlUmVjb2lsU3RhdGVMb2FkYWJsZSQxLFxuICB1c2VTZXRSZWNvaWxTdGF0ZTogdXNlU2V0UmVjb2lsU3RhdGUkMSxcbiAgdXNlUmVzZXRSZWNvaWxTdGF0ZTogdXNlUmVzZXRSZWNvaWxTdGF0ZSQxLFxuICB1c2VHZXRSZWNvaWxWYWx1ZUluZm9fVU5TVEFCTEU6IFJlY29pbF91c2VHZXRSZWNvaWxWYWx1ZUluZm8sXG4gIHVzZVJlY29pbFJlZnJlc2hlcl9VTlNUQUJMRTogUmVjb2lsX3VzZVJlY29pbFJlZnJlc2hlcixcbiAgdXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEU6IHVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFJDEsXG4gIHVzZVJlY29pbFZhbHVlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRTogdXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFJDEsXG4gIHVzZVJlY29pbFN0YXRlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRTogdXNlUmVjb2lsU3RhdGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFJDEsXG4gIC8vIEhvb2tzIGZvciBjb21wbGV4IG9wZXJhdGlvbnNcbiAgdXNlUmVjb2lsQ2FsbGJhY2s6IHVzZVJlY29pbENhbGxiYWNrJDEsXG4gIHVzZVJlY29pbFRyYW5zYWN0aW9uX1VOU1RBQkxFOiBSZWNvaWxfdXNlUmVjb2lsVHJhbnNhY3Rpb24sXG4gIC8vIFNuYXBzaG90c1xuICB1c2VHb3RvUmVjb2lsU25hcHNob3Q6IHVzZUdvdG9SZWNvaWxTbmFwc2hvdCQxLFxuICB1c2VSZWNvaWxTbmFwc2hvdDogdXNlUmVjb2lsU25hcHNob3QkMSxcbiAgdXNlUmVjb2lsVHJhbnNhY3Rpb25PYnNlcnZlcl9VTlNUQUJMRTogdXNlUmVjb2lsVHJhbnNhY3Rpb25PYnNlcnZlciQxLFxuICBzbmFwc2hvdF9VTlNUQUJMRTogZnJlc2hTbmFwc2hvdCQyLFxuICAvLyBNZW1vcnkgTWFuYWdlbWVudFxuICB1c2VSZXRhaW46IFJlY29pbF91c2VSZXRhaW4sXG4gIHJldGVudGlvblpvbmU6IHJldGVudGlvblpvbmUkMVxufTtcbnZhciBSZWNvaWxfaW5kZXhfMSA9IFJlY29pbF9pbmRleC5EZWZhdWx0VmFsdWU7XG52YXIgUmVjb2lsX2luZGV4XzIgPSBSZWNvaWxfaW5kZXguaXNSZWNvaWxWYWx1ZTtcbnZhciBSZWNvaWxfaW5kZXhfMyA9IFJlY29pbF9pbmRleC5SZWNvaWxMb2FkYWJsZTtcbnZhciBSZWNvaWxfaW5kZXhfNCA9IFJlY29pbF9pbmRleC5SZWNvaWxSb290O1xudmFyIFJlY29pbF9pbmRleF81ID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFN0b3JlSUQ7XG52YXIgUmVjb2lsX2luZGV4XzYgPSBSZWNvaWxfaW5kZXgudXNlUmVjb2lsQnJpZGdlQWNyb3NzUmVhY3RSb290c19VTlNUQUJMRTtcbnZhciBSZWNvaWxfaW5kZXhfNyA9IFJlY29pbF9pbmRleC5hdG9tO1xudmFyIFJlY29pbF9pbmRleF84ID0gUmVjb2lsX2luZGV4LnNlbGVjdG9yO1xudmFyIFJlY29pbF9pbmRleF85ID0gUmVjb2lsX2luZGV4LmF0b21GYW1pbHk7XG52YXIgUmVjb2lsX2luZGV4XzEwID0gUmVjb2lsX2luZGV4LnNlbGVjdG9yRmFtaWx5O1xudmFyIFJlY29pbF9pbmRleF8xMSA9IFJlY29pbF9pbmRleC5jb25zdFNlbGVjdG9yO1xudmFyIFJlY29pbF9pbmRleF8xMiA9IFJlY29pbF9pbmRleC5lcnJvclNlbGVjdG9yO1xudmFyIFJlY29pbF9pbmRleF8xMyA9IFJlY29pbF9pbmRleC5yZWFkT25seVNlbGVjdG9yO1xudmFyIFJlY29pbF9pbmRleF8xNCA9IFJlY29pbF9pbmRleC5ub1dhaXQ7XG52YXIgUmVjb2lsX2luZGV4XzE1ID0gUmVjb2lsX2luZGV4LndhaXRGb3JOb25lO1xudmFyIFJlY29pbF9pbmRleF8xNiA9IFJlY29pbF9pbmRleC53YWl0Rm9yQW55O1xudmFyIFJlY29pbF9pbmRleF8xNyA9IFJlY29pbF9pbmRleC53YWl0Rm9yQWxsO1xudmFyIFJlY29pbF9pbmRleF8xOCA9IFJlY29pbF9pbmRleC53YWl0Rm9yQWxsU2V0dGxlZDtcbnZhciBSZWNvaWxfaW5kZXhfMTkgPSBSZWNvaWxfaW5kZXgudXNlUmVjb2lsVmFsdWU7XG52YXIgUmVjb2lsX2luZGV4XzIwID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFZhbHVlTG9hZGFibGU7XG52YXIgUmVjb2lsX2luZGV4XzIxID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFN0YXRlO1xudmFyIFJlY29pbF9pbmRleF8yMiA9IFJlY29pbF9pbmRleC51c2VSZWNvaWxTdGF0ZUxvYWRhYmxlO1xudmFyIFJlY29pbF9pbmRleF8yMyA9IFJlY29pbF9pbmRleC51c2VTZXRSZWNvaWxTdGF0ZTtcbnZhciBSZWNvaWxfaW5kZXhfMjQgPSBSZWNvaWxfaW5kZXgudXNlUmVzZXRSZWNvaWxTdGF0ZTtcbnZhciBSZWNvaWxfaW5kZXhfMjUgPSBSZWNvaWxfaW5kZXgudXNlR2V0UmVjb2lsVmFsdWVJbmZvX1VOU1RBQkxFO1xudmFyIFJlY29pbF9pbmRleF8yNiA9IFJlY29pbF9pbmRleC51c2VSZWNvaWxSZWZyZXNoZXJfVU5TVEFCTEU7XG52YXIgUmVjb2lsX2luZGV4XzI3ID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFO1xudmFyIFJlY29pbF9pbmRleF8yOCA9IFJlY29pbF9pbmRleC51c2VSZWNvaWxWYWx1ZV9UUkFOU0lUSU9OX1NVUFBPUlRfVU5TVEFCTEU7XG52YXIgUmVjb2lsX2luZGV4XzI5ID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFN0YXRlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRTtcbnZhciBSZWNvaWxfaW5kZXhfMzAgPSBSZWNvaWxfaW5kZXgudXNlUmVjb2lsQ2FsbGJhY2s7XG52YXIgUmVjb2lsX2luZGV4XzMxID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFRyYW5zYWN0aW9uX1VOU1RBQkxFO1xudmFyIFJlY29pbF9pbmRleF8zMiA9IFJlY29pbF9pbmRleC51c2VHb3RvUmVjb2lsU25hcHNob3Q7XG52YXIgUmVjb2lsX2luZGV4XzMzID0gUmVjb2lsX2luZGV4LnVzZVJlY29pbFNuYXBzaG90O1xudmFyIFJlY29pbF9pbmRleF8zNCA9IFJlY29pbF9pbmRleC51c2VSZWNvaWxUcmFuc2FjdGlvbk9ic2VydmVyX1VOU1RBQkxFO1xudmFyIFJlY29pbF9pbmRleF8zNSA9IFJlY29pbF9pbmRleC5zbmFwc2hvdF9VTlNUQUJMRTtcbnZhciBSZWNvaWxfaW5kZXhfMzYgPSBSZWNvaWxfaW5kZXgudXNlUmV0YWluO1xudmFyIFJlY29pbF9pbmRleF8zNyA9IFJlY29pbF9pbmRleC5yZXRlbnRpb25ab25lO1xuXG5leHBvcnQgZGVmYXVsdCBSZWNvaWxfaW5kZXg7XG5leHBvcnQgeyBSZWNvaWxfaW5kZXhfMSBhcyBEZWZhdWx0VmFsdWUsIFJlY29pbF9pbmRleF8zIGFzIFJlY29pbExvYWRhYmxlLCBSZWNvaWxfaW5kZXhfNCBhcyBSZWNvaWxSb290LCBSZWNvaWxfaW5kZXhfNyBhcyBhdG9tLCBSZWNvaWxfaW5kZXhfOSBhcyBhdG9tRmFtaWx5LCBSZWNvaWxfaW5kZXhfMTEgYXMgY29uc3RTZWxlY3RvciwgUmVjb2lsX2luZGV4XzEyIGFzIGVycm9yU2VsZWN0b3IsIFJlY29pbF9pbmRleF8yIGFzIGlzUmVjb2lsVmFsdWUsIFJlY29pbF9pbmRleF8xNCBhcyBub1dhaXQsIFJlY29pbF9pbmRleF8xMyBhcyByZWFkT25seVNlbGVjdG9yLCBSZWNvaWxfaW5kZXhfMzcgYXMgcmV0ZW50aW9uWm9uZSwgUmVjb2lsX2luZGV4XzggYXMgc2VsZWN0b3IsIFJlY29pbF9pbmRleF8xMCBhcyBzZWxlY3RvckZhbWlseSwgUmVjb2lsX2luZGV4XzM1IGFzIHNuYXBzaG90X1VOU1RBQkxFLCBSZWNvaWxfaW5kZXhfMjUgYXMgdXNlR2V0UmVjb2lsVmFsdWVJbmZvX1VOU1RBQkxFLCBSZWNvaWxfaW5kZXhfMzIgYXMgdXNlR290b1JlY29pbFNuYXBzaG90LCBSZWNvaWxfaW5kZXhfNiBhcyB1c2VSZWNvaWxCcmlkZ2VBY3Jvc3NSZWFjdFJvb3RzX1VOU1RBQkxFLCBSZWNvaWxfaW5kZXhfMzAgYXMgdXNlUmVjb2lsQ2FsbGJhY2ssIFJlY29pbF9pbmRleF8yNiBhcyB1c2VSZWNvaWxSZWZyZXNoZXJfVU5TVEFCTEUsIFJlY29pbF9pbmRleF8zMyBhcyB1c2VSZWNvaWxTbmFwc2hvdCwgUmVjb2lsX2luZGV4XzIxIGFzIHVzZVJlY29pbFN0YXRlLCBSZWNvaWxfaW5kZXhfMjIgYXMgdXNlUmVjb2lsU3RhdGVMb2FkYWJsZSwgUmVjb2lsX2luZGV4XzI5IGFzIHVzZVJlY29pbFN0YXRlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRSwgUmVjb2lsX2luZGV4XzUgYXMgdXNlUmVjb2lsU3RvcmVJRCwgUmVjb2lsX2luZGV4XzM0IGFzIHVzZVJlY29pbFRyYW5zYWN0aW9uT2JzZXJ2ZXJfVU5TVEFCTEUsIFJlY29pbF9pbmRleF8zMSBhcyB1c2VSZWNvaWxUcmFuc2FjdGlvbl9VTlNUQUJMRSwgUmVjb2lsX2luZGV4XzE5IGFzIHVzZVJlY29pbFZhbHVlLCBSZWNvaWxfaW5kZXhfMjAgYXMgdXNlUmVjb2lsVmFsdWVMb2FkYWJsZSwgUmVjb2lsX2luZGV4XzI3IGFzIHVzZVJlY29pbFZhbHVlTG9hZGFibGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFLCBSZWNvaWxfaW5kZXhfMjggYXMgdXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFLCBSZWNvaWxfaW5kZXhfMjQgYXMgdXNlUmVzZXRSZWNvaWxTdGF0ZSwgUmVjb2lsX2luZGV4XzM2IGFzIHVzZVJldGFpbiwgUmVjb2lsX2luZGV4XzIzIGFzIHVzZVNldFJlY29pbFN0YXRlLCBSZWNvaWxfaW5kZXhfMTcgYXMgd2FpdEZvckFsbCwgUmVjb2lsX2luZGV4XzE4IGFzIHdhaXRGb3JBbGxTZXR0bGVkLCBSZWNvaWxfaW5kZXhfMTYgYXMgd2FpdEZvckFueSwgUmVjb2lsX2luZGV4XzE1IGFzIHdhaXRGb3JOb25lIH07XG4iXSwibmFtZXMiOlsiUmVjb2lsX2VyciIsIm1lc3NhZ2UiLCJlcnJvciIsIkVycm9yIiwidW5kZWZpbmVkIiwic3RhY2siLCJfIiwiUmVjb2lsX2lzUHJvbWlzZSIsInAiLCJ0aGVuIiwiUmVjb2lsX251bGx0aHJvd3MiLCJ4IiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkJhc2VMb2FkYWJsZSIsImdldFZhbHVlIiwidG9Qcm9taXNlIiwidmFsdWVNYXliZSIsInZhbHVlT3JUaHJvdyIsInRoaXMiLCJzdGF0ZSIsInByb21pc2VNYXliZSIsInByb21pc2VPclRocm93IiwiZXJyb3JNYXliZSIsImVycm9yT3JUaHJvdyIsImlzIiwib3RoZXIiLCJjb250ZW50cyIsIm1hcCIsIl9tYXAiLCJWYWx1ZUxvYWRhYmxlIiwiY29uc3RydWN0b3IiLCJzdXBlciIsIlByb21pc2UiLCJyZXNvbHZlIiwibmV4dCIsImxvYWRhYmxlV2l0aFByb21pc2UiLCJpc0xvYWRhYmxlIiwibG9hZGFibGVXaXRoVmFsdWUiLCJlIiwibG9hZGFibGVXaXRoRXJyb3IiLCJFcnJvckxvYWRhYmxlIiwicmVqZWN0IiwiTG9hZGluZ0xvYWRhYmxlIiwicHJvbWlzZSIsIm5leHRMb2FkYWJsZSIsImNhdGNoIiwiZnJlZXplIiwibG9hZGFibGVBbGwiLCJpbnB1dHMiLCJvdXRwdXQiLCJldmVyeSIsImkiLCJzb21lIiwiZmluZCIsImFsbCIsImxvYWRhYmxlQWxsQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib3V0cHV0cyIsInJlZHVjZSIsIm91dCIsImlkeCIsIkxvYWRhYmxlU3RhdGljSW50ZXJmYWNlIiwib2YiLCJSZWNvaWxfTG9hZGFibGUiLCJsb2FkYWJsZUxvYWRpbmciLCJSZWNvaWxMb2FkYWJsZSIsIlJlY29pbF9Mb2FkYWJsZV8xIiwiUmVjb2lsX0xvYWRhYmxlXzIiLCJSZWNvaWxfTG9hZGFibGVfMyIsIlJlY29pbF9Mb2FkYWJsZV80IiwiUmVjb2lsX0xvYWRhYmxlXzUiLCJSZWNvaWxfTG9hZGFibGVfNiIsIlJlY29pbF9Mb2FkYWJsZV83IiwiUmVjb2lsX0xvYWRhYmxlJDEiLCJfX3Byb3RvX18iLCJBYnN0cmFjdFJlY29pbFZhbHVlIiwibmV3S2V5IiwiUmVjb2lsU3RhdGUiLCJSZWNvaWxWYWx1ZVJlYWRPbmx5IiwiUmVjb2lsX1JlY29pbFZhbHVlIiwiaXNSZWNvaWxWYWx1ZSIsIlJlY29pbF9SZWNvaWxWYWx1ZV8xIiwiUmVjb2lsX1JlY29pbFZhbHVlXzIiLCJSZWNvaWxfUmVjb2lsVmFsdWVfMyIsIlJlY29pbF9SZWNvaWxWYWx1ZV80IiwiUmVjb2lsX1JlY29pbFZhbHVlJDEiLCJna3MiLCJNYXAiLCJzZXQiLCJSZWNvaWxfZ2t4X09TUyIsImdrIiwiX2drcyRnZXQiLCJnZXQiLCJzZXRQYXNzIiwic2V0RmFpbCIsImNsZWFyIiwiUmVjb2lsX2dreCIsIlJlY29pbF9tYXBJdGVyYWJsZSIsIml0ZXJhYmxlIiwiY2FsbGJhY2siLCJpbmRleCIsIkRlZmF1bHRWYWx1ZSIsIkRFRkFVTFRfVkFMVUUiLCJSZWNvaWxWYWx1ZU5vdFJlYWR5Iiwibm9kZXMiLCJyZWNvaWxWYWx1ZXMiLCJOb2RlTWlzc2luZ0Vycm9yIiwiY29uZmlnRGVsZXRpb25IYW5kbGVycyIsImdldENvbmZpZ0RlbGV0aW9uSGFuZGxlciIsImZuIiwibW9kdWxlIiwiUmVjb2lsX05vZGUiLCJyZWdpc3Rlck5vZGUiLCJub2RlIiwiaGFzIiwiY29uc29sZSIsIndhcm4iLCJyZWNvaWxWYWx1ZSIsImdldE5vZGUiLCJnZXROb2RlTWF5YmUiLCJkZWxldGVOb2RlQ29uZmlnSWZQb3NzaWJsZSIsIl9ub2RlJHNob3VsZERlbGV0ZUNvbiIsIl9nZXRDb25maWdEZWxldGlvbkhhbiIsInNob3VsZERlbGV0ZUNvbmZpZ09uUmVsZWFzZSIsImNhbGwiLCJkZWxldGUiLCJzZXRDb25maWdEZWxldGlvbkhhbmRsZXIiLCJyZWNvaWxWYWx1ZXNGb3JLZXlzIiwia2V5cyIsIlJlY29pbF9RdWV1ZSIsInMiLCJmIiwiaGFtdF8xIiwiX3R5cGVvZiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwicHJvdG90eXBlIiwiaGFtdCIsIkJVQ0tFVF9TSVpFIiwiTWF0aCIsInBvdyIsIk1BU0siLCJNQVhfSU5ERVhfTk9ERSIsIk1JTl9BUlJBWV9OT0RFIiwibm90aGluZyIsImNvbnN0YW50IiwiaGFzaCIsInN0ciIsInR5cGUiLCJsZW4iLCJsZW5ndGgiLCJjaGFyQ29kZUF0IiwiaGFzaEZyYWdtZW50Iiwic2hpZnQiLCJoIiwidG9CaXRtYXAiLCJmcm9tQml0bWFwIiwiYml0bWFwIiwiYml0IiwiYXJyYXlVcGRhdGUiLCJtdXRhdGUiLCJhdCIsInYiLCJhcnIiLCJhcnJheVNwbGljZU91dCIsIm5ld0xlbiIsImciLCJlbXB0eSIsIl9faGFtdF9pc0VtcHR5IiwiaXNFbXB0eU5vZGUiLCJMZWFmIiwiZWRpdCIsIl9tb2RpZnkiLCJMZWFmX19tb2RpZnkiLCJDb2xsaXNpb24iLCJjaGlsZHJlbiIsIkNvbGxpc2lvbl9fbW9kaWZ5IiwiSW5kZXhlZE5vZGUiLCJtYXNrIiwiSW5kZXhlZE5vZGVfX21vZGlmeSIsIkFycmF5Tm9kZSIsInNpemUiLCJBcnJheU5vZGVfX21vZGlmeSIsIm1lcmdlTGVhdmVzIiwiaDEiLCJuMSIsImgyIiwibjIiLCJzdWJIMSIsInN1YkgyIiwiY2FuRWRpdE5vZGUiLCJrZXlFcSIsImsiLCJfdiIsImxpc3QiLCJjaGlsZCIsIl9uZXdWYWx1ZSIsIm5ld1ZhbHVlIiwidXBkYXRlQ29sbGlzaW9uTGlzdCIsImZyYWciLCJpbmR4IiwiZXhpc3RzIiwiY3VycmVudCIsImNhbkVkaXQiLCJuZXdDaGlsZHJlbiIsInN1Yk5vZGVzIiwiY291bnQiLCJleHBhbmQiLCJfaSIsImFycmF5U3BsaWNlSW4iLCJuZXdDaGlsZCIsInJlbW92ZWQiLCJlbGVtZW50cyIsImVsZW0iLCJwYWNrIiwiZWRpdGFibGUiLCJjb25maWciLCJyb290IiwiX2VkaXRhYmxlIiwiX2VkaXQiLCJfY29uZmlnIiwiX3Jvb3QiLCJfc2l6ZSIsInNldFRyZWUiLCJuZXdSb290IiwibmV3U2l6ZSIsInRyeUdldEhhc2giLCJhbHQiLCJ0cnlHZXQiLCJnZXRIYXNoIiwiaGFzSGFzaCIsImRlZktleUNvbXBhcmUiLCJ5IiwibWFrZSIsImlzRW1wdHkiLCJtb2RpZnlIYXNoIiwiTmFOIiwibW9kaWZ5Iiwic2V0SGFzaCIsImRlbCIsInJlbW92ZUhhc2giLCJkZWxldGVIYXNoIiwicmVtb3ZlIiwiYmVnaW5NdXRhdGlvbiIsImVuZE11dGF0aW9uIiwidHJhbnNpZW50IiwiYXBwayIsImxhenlWaXNpdENoaWxkcmVuIiwibGF6eVZpc2l0IiwicmVzdCIsIkRPTkUiLCJkb25lIiwiTWFwSXRlcmF0b3IiLCJ2MCIsInZpc2l0IiwiYnVpbGRQYWlycyIsImVudHJpZXMiLCJidWlsZEtleXMiLCJidWlsZFZhbHVlcyIsInZhbHVlcyIsImZvbGQiLCJ6IiwibSIsInRvVmlzaXQiLCJwb3AiLCJwdXNoIiwiZm9yRWFjaCIsImV4cG9ydHMiLCJCdWlsdEluTWFwIiwiZXhpc3RpbmciLCJjbG9uZSIsInBlcnNpc3RlbnRNYXAiLCJ0b01hcCIsIkhhc2hBcnJheU1hcHBlZFRyaWVNYXAiLCJfaGFtdCIsIlJlY29pbF9QZXJzaXN0ZW50TWFwXzEiLCJSZWNvaWxfUGVyc2lzdGVudE1hcCQxIiwiUmVjb2lsX2RpZmZlcmVuY2VTZXRzIiwic2V0c1dpdGhWYWx1ZXNUb1JlbW92ZSIsInJldCIsIlNldCIsIkZJUlNUIiwib3RoZXJTZXQiLCJhZGQiLCJSZWNvaWxfbWFwTWFwIiwicmVzdWx0IiwibWVyZ2VEZXBlbmRlbmN5TWFwSW50b0dyYXBoIiwiZGVwcyIsImdyYXBoIiwib2xkZXJHcmFwaCIsIm5vZGVEZXBzIiwibm9kZVRvTm9kZVN1YnNjcmlwdGlvbnMiLCJ1cHN0cmVhbXMiLCJkb3duc3RyZWFtIiwiZXhpc3RpbmdVcHN0cmVhbXMiLCJ1cHN0cmVhbSIsIlJlY29pbF9HcmFwaCIsImFkZFRvRGVwZW5kZW5jeU1hcCIsImRlcGVuZGVuY3lNYXAiLCJjbG9uZUdyYXBoIiwibWVyZ2VEZXBzSW50b0RlcGVuZGVuY3lNYXAiLCJmcm9tIiwiaW50byIsInVwc3RyZWFtRGVwcyIsImRvd25zdHJlYW1Ob2RlIiwiZGVwIiwic2F2ZURlcGVuZGVuY3lNYXBUb1N0b3JlIiwic3RvcmUiLCJ2ZXJzaW9uIiwiX3N0b3JlU3RhdGUkbmV4dFRyZWUiLCJfc3RvcmVTdGF0ZSRwcmV2aW91c1QiLCJfc3RvcmVTdGF0ZSRwcmV2aW91c1QyIiwiX3N0b3JlU3RhdGUkcHJldmlvdXNUMyIsInN0b3JlU3RhdGUiLCJnZXRTdGF0ZSIsImN1cnJlbnRUcmVlIiwibmV4dFRyZWUiLCJwcmV2aW91c1RyZWUiLCJnZXRHcmFwaCIsIl9zdG9yZVN0YXRlJG5leHRUcmVlMiIsIm5leHRWZXJzaW9uIiwibmV4dFRyZWVTdGF0ZVZlcnNpb24iLCJuZXh0U3RvcmVJRCIsIm5leHRDb21wb25lbnRJRCIsIlJlY29pbF9LZXlzIiwiZ2V0TmV4dFRyZWVTdGF0ZVZlcnNpb24iLCJnZXROZXh0U3RvcmVJRCIsImdldE5leHRDb21wb25lbnRJRCIsInBlcnNpc3RlbnRNYXAkMSIsImdldE5leHRUcmVlU3RhdGVWZXJzaW9uJDEiLCJtYWtlRW1wdHlUcmVlU3RhdGUiLCJzdGF0ZUlEIiwidHJhbnNhY3Rpb25NZXRhZGF0YSIsImRpcnR5QXRvbXMiLCJhdG9tVmFsdWVzIiwibm9udmFsaWRhdGVkQXRvbXMiLCJSZWNvaWxfU3RhdGUiLCJtYWtlRW1wdHlTdG9yZVN0YXRlIiwiY29tbWl0RGVwdGgiLCJrbm93bkF0b21zIiwia25vd25TZWxlY3RvcnMiLCJ0cmFuc2FjdGlvblN1YnNjcmlwdGlvbnMiLCJub2RlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25zIiwibm9kZVRvQ29tcG9uZW50U3Vic2NyaXB0aW9ucyIsInF1ZXVlZENvbXBvbmVudENhbGxiYWNrc19ERVBSRUNBVEVEIiwic3VzcGVuZGVkQ29tcG9uZW50UmVzb2x2ZXJzIiwiZ3JhcGhzQnlWZXJzaW9uIiwicmV0ZW50aW9uIiwicmVmZXJlbmNlQ291bnRzIiwibm9kZXNSZXRhaW5lZEJ5Wm9uZSIsInJldGFpbmFibGVzVG9DaGVja0ZvclJlbGVhc2UiLCJub2RlQ2xlYW51cEZ1bmN0aW9ucyIsIlJldGVudGlvblpvbmUiLCJSZWNvaWxfUmV0ZW50aW9uWm9uZSIsInJldGVudGlvblpvbmUiLCJSZWNvaWxfQ29weU9uV3JpdGUiLCJzZXRCeUFkZGluZ1RvU2V0Iiwic2V0QnlEZWxldGluZ0Zyb21TZXQiLCJtYXBCeVNldHRpbmdJbk1hcCIsIm1hcEJ5VXBkYXRpbmdJbk1hcCIsInVwZGF0ZXIiLCJtYXBCeURlbGV0aW5nRnJvbU1hcCIsIm1hcEJ5RGVsZXRpbmdNdWx0aXBsZUZyb21NYXAiLCJrcyIsIlJlY29pbF9maWx0ZXJJdGVyYWJsZSIsInByZWRpY2F0ZSIsIlJlY29pbF9sYXp5UHJveHkiLCJiYXNlIiwiZmFjdG9yaWVzIiwiUHJveHkiLCJ0YXJnZXQiLCJwcm9wIiwib3duS2V5cyIsImdldE5vZGUkMSIsImdldE5vZGVNYXliZSQxIiwicmVjb2lsVmFsdWVzRm9yS2V5cyQxIiwiUmV0ZW50aW9uWm9uZSQxIiwic2V0QnlBZGRpbmdUb1NldCQxIiwiZW1wdHlTZXQiLCJSZWFkT25seVJlY29pbFZhbHVlRXJyb3IiLCJpbml0aWFsaXplTm9kZUlmTmV3VG9TdG9yZSIsInRyZWVTdGF0ZSIsInRyaWdnZXIiLCJyZXRlbnRpb25DbGVhbnVwIiwibm9kZUtleSIsInJldGFpbmVkQnkiLCJhZGRUb1pvbmUiLCJ6b25lIiwiZGVsZXRlRnJvbVpvbmUiLCJpbml0aWFsaXplUmV0ZW50aW9uRm9yTm9kZSIsIm5vZGVDbGVhbnVwIiwiaW5pdCIsInBlZWtOb2RlTG9hZGFibGUiLCJwZWVrIiwiZ2V0RG93bnN0cmVhbU5vZGVzIiwidmlzaXRlZE5vZGVzIiwidmlzaXRpbmdOb2RlcyIsIl9ncmFwaCRub2RlVG9Ob2RlU3VicyIsInN1YnNjcmliZWROb2RlcyIsIl9jcmVhdGVNdXRhYmxlU291cmNlIiwiX3VzZU11dGFibGVTb3VyY2UiLCJfdXNlU3luY0V4dGVybmFsU3RvcmUiLCJSZWNvaWxfRnVuY3Rpb25hbENvcmUiLCJnZXROb2RlTG9hZGFibGUiLCJzZXROb2RlVmFsdWUiLCJpbml0aWFsaXplTm9kZSIsImNsZWFuVXBOb2RlIiwiX3N0YXRlJG5vZGVDbGVhbnVwRnVuIiwic2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVfREVQUkVDQVRFRCIsIl9ub2RlJGludmFsaWRhdGUiLCJpbnZhbGlkYXRlIiwicGVla05vZGVJbmZvIiwibm9kZVR5cGUiLCJsb2FkYWJsZSIsImlzQWN0aXZlIiwiaXNTZXQiLCJpc01vZGlmaWVkIiwiX2dyYXBoJG5vZGVEZXBzJGdldCIsInN1YnNjcmliZXJzIiwiX3N0b3JlU3RhdGUkbm9kZVRvQ29tIiwiX3N0b3JlU3RhdGUkbm9kZVRvQ29tMiIsImNvbXBvbmVudHMiLCJuYW1lIiwiY3JlYXRlTXV0YWJsZVNvdXJjZSIsInVzZU11dGFibGVTb3VyY2UiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIlJlY29pbF9SZWFjdE1vZGUiLCJyZWFjdE1vZGUiLCJtb2RlIiwiZWFybHkiLCJjb25jdXJyZW50Iiwid2luZG93IiwiJGRpc2FibGVSZWNvaWxWYWx1ZU11dGFibGVTb3VyY2VfVEVNUF9IQUNLX0RPX05PVF9VU0UiLCJnZXREb3duc3RyZWFtTm9kZXMkMSIsImdldE5vZGVMb2FkYWJsZSQxIiwic2V0Tm9kZVZhbHVlJDEiLCJnZXROZXh0Q29tcG9uZW50SUQkMSIsImdldE5vZGUkMiIsImdldE5vZGVNYXliZSQyIiwiRGVmYXVsdFZhbHVlJDEiLCJSZWNvaWxWYWx1ZU5vdFJlYWR5JDEiLCJyZWFjdE1vZGUkMSIsIkFic3RyYWN0UmVjb2lsVmFsdWUkMSIsIlJlY29pbFN0YXRlJDEiLCJSZWNvaWxWYWx1ZVJlYWRPbmx5JDEiLCJpc1JlY29pbFZhbHVlJDEiLCJhcHBseUFjdGlvbiIsImFjdGlvbiIsInZhbHVlT3JVcGRhdGVyIiwidmFsdWVGcm9tVmFsdWVPclVwZGF0ZXIiLCJ3cml0ZXMiLCJ3cml0ZUxvYWRhYmxlVG9UcmVlU3RhdGUiLCJ1bnZhbGlkYXRlZFZhbHVlIiwiYXBwbHlBY3Rpb25zVG9TdG9yZSIsImFjdGlvbnMiLCJyZXBsYWNlU3RhdGUiLCJuZXdTdGF0ZSIsImNvcHlUcmVlU3RhdGUiLCJpbnZhbGlkYXRlRG93bnN0cmVhbXMiLCJxdWV1ZU9yUGVyZm9ybVN0YXRlVXBkYXRlIiwiYmF0Y2hTdGFjayIsImFjdGlvbnNCeVN0b3JlIiwiZG93bnN0cmVhbXMiLCJfZ2V0Tm9kZU1heWJlIiwiX2dldE5vZGVNYXliZSRpbnZhbGlkIiwic2V0UmVjb2lsVmFsdWUiLCJSZWNvaWxfUmVjb2lsVmFsdWVJbnRlcmZhY2UiLCJnZXRSZWNvaWxWYWx1ZUFzTG9hZGFibGUiLCJzZXRSZWNvaWxWYWx1ZUxvYWRhYmxlIiwibWFya1JlY29pbFZhbHVlTW9kaWZpZWQiLCJzZXRVbnZhbGlkYXRlZFJlY29pbFZhbHVlIiwic3Vic2NyaWJlVG9SZWNvaWxWYWx1ZSIsImNvbXBvbmVudERlYnVnTmFtZSIsInN1YklEIiwicmVsZWFzZSIsInJlbGVhc2VTdG9yZVN0YXRlIiwic3VicyIsImFwcGx5QXRvbVZhbHVlV3JpdGVzIiwiYmF0Y2hTdGFydCIsInJlZnJlc2hSZWNvaWxWYWx1ZSIsIl9ub2RlJGNsZWFyQ2FjaGUiLCJjbGVhckNhY2hlIiwiaW52YWxpZGF0ZURvd25zdHJlYW1zX0ZPUl9URVNUSU5HIiwiUmVjb2lsX3NvbWVTZXQiLCJjb250ZXh0IiwiZW50cnkiLCJjbGVhblVwTm9kZSQxIiwiZGVsZXRlTm9kZUNvbmZpZ0lmUG9zc2libGUkMSIsImdldE5vZGUkMyIsIlJldGVudGlvblpvbmUkMiIsImVtcHR5U2V0JDEiLCJyZWxlYXNlUmV0YWluYWJsZXNOb3dPbkN1cnJlbnRUcmVlIiwicmV0YWluYWJsZXMiLCJyIiwibiIsInJlbGVhc2FibGVOb2RlcyIsInNlYXJjaEZyb21Ob2RlcyIsIm5vblJlbGVhc2FibGVOb2RlcyIsImZpbmRSZWxlYXNhYmxlTm9kZXNJbm5lciIsInJlbGVhc2FibGVOb2Rlc0ZvdW5kVGhpc0l0ZXJhdGlvbiIsImRvTm90RGVzY2VuZEludG8xIiwiZG9Ob3REZXNjZW5kSW50bzIiLCJhbnN3ZXIiLCJ2aXNpdGVkIiwiZ2V0RG93bnN0cmVhbU5vZGVzSW5Ub3BvbG9naWNhbE9yZGVyIiwiX3N0b3JlU3RhdGUkcmV0ZW50aW9uIiwiem9uZXNUaGF0Q291bGRSZXRhaW5Ob2RlIiwibm9kZUNoaWxkcmVuIiwicGFyZW50cyIsInBhcmVudCIsImZpbmRSZWxlYXNhYmxlTm9kZXMiLCJyZWxlYXNlTm9kZSIsInpvbmVzIiwiX3N0b3JlU3RhdGUkcmV0ZW50aW9uMiIsIl9zdG9yZVN0YXRlJHJldGVudGlvbjMiLCJ1cGRhdGVSZXRhaW5Db3VudFRvWmVybyIsInJldGFpbmFibGUiLCJzY2hlZHVsZU9yUGVyZm9ybVBvc3NpYmxlUmVsZWFzZU9mUmV0YWluYWJsZSIsIlJlY29pbF9SZXRlbnRpb24iLCJTVVNQRU5TRV9USU1FT1VUX01TIiwidXBkYXRlUmV0YWluQ291bnQiLCJkZWx0YSIsIl9tYXAkZ2V0IiwibmV3Q291bnQiLCJyZWxlYXNlU2NoZWR1bGVkUmV0YWluYWJsZXNOb3ciLCJyZXRhaW5lZEJ5T3B0aW9uV2l0aERlZmF1bHQiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsIlJlYWN0QmF0Y2hlZFVwZGF0ZXMiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyQxIiwiUmVjb2lsX1JlYWN0QmF0Y2hlZFVwZGF0ZXMiLCJiYXRjaFN0YXJ0JDEiLCJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyQyIiwiYmF0Y2hlciIsIlJlY29pbF9CYXRjaGluZyIsImdldEJhdGNoZXIiLCJzZXRCYXRjaGVyIiwibmV3QmF0Y2hlciIsImJhdGNoVXBkYXRlcyIsImJhdGNoRW5kIiwiUmVjb2lsX0Vudmlyb25tZW50IiwiaXNTU1IiLCJpc1JlYWN0TmF0aXZlIiwibmF2aWdhdG9yIiwicHJvZHVjdCIsIlJlY29pbF9NZW1vaXplIiwibWVtb2l6ZVdpdGhBcmdzSGFzaCIsImhhc2hGdW5jdGlvbiIsImNhY2hlIiwiYXJncyIsImhhc093blByb3BlcnR5IiwiYXBwbHkiLCJtZW1vaXplT25lV2l0aEFyZ3NIYXNoIiwibGFzdEtleSIsImxhc3RSZXN1bHQiLCJtZW1vaXplT25lV2l0aEFyZ3NIYXNoQW5kSW52YWxpZGF0aW9uIiwiYmF0Y2hVcGRhdGVzJDEiLCJpbml0aWFsaXplTm9kZSQxIiwicGVla05vZGVJbmZvJDEiLCJncmFwaCQxIiwiZ2V0TmV4dFN0b3JlSUQkMSIsIkRFRkFVTFRfVkFMVUUkMSIsInJlY29pbFZhbHVlcyQxIiwicmVjb2lsVmFsdWVzRm9yS2V5cyQyIiwiQWJzdHJhY3RSZWNvaWxWYWx1ZSQyIiwiZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDEiLCJzZXRSZWNvaWxWYWx1ZSQxIiwic2V0VW52YWxpZGF0ZWRSZWNvaWxWYWx1ZSQxIiwidXBkYXRlUmV0YWluQ291bnQkMSIsImdldE5leHRUcmVlU3RhdGVWZXJzaW9uJDIiLCJtYWtlRW1wdHlTdG9yZVN0YXRlJDEiLCJpc1NTUiQxIiwibWVtb2l6ZU9uZVdpdGhBcmdzSGFzaEFuZEludmFsaWRhdGlvbiQxIiwiU25hcHNob3QiLCJjaGVja1JlZkNvdW50X0lOVEVSTkFMIiwiX3N0b3JlIiwiZ2V0TG9hZGFibGUiLCJvcHQiLCJpc0luaXRpYWxpemVkIiwiaXRlcnMiLCJpdGVyIiwidmFsIiwiUmVjb2lsX2NvbmNhdEl0ZXJhYmxlcyIsIm1hcHBlciIsIm11dGFibGVTbmFwc2hvdCIsIk11dGFibGVTbmFwc2hvdCIsImFzeW5jIiwicmV0YWluIiwiYXV0b1JlbGVhc2VfSU5URVJOQUwiLCJzdG9yZUlEIiwicmVwbGFjZXIiLCJncmFwaHMiLCJuZXdHcmFwaCIsInN1YnNjcmliZVRvVHJhbnNhY3Rpb25zIiwiYWRkVHJhbnNhY3Rpb25NZXRhZGF0YSIsIl9yZWZDb3VudCIsInJlbGVhc2VkIiwiX3JlbGVhc2UiLCJzZXRUaW1lb3V0IiwiY2xlYW51cCIsImlzUmV0YWluZWQiLCJnZXRTdG9yZV9JTlRFUk5BTCIsImdldElEIiwiY2xvbmVTdG9yZVN0YXRlIiwiYnVtcFZlcnNpb24iLCJtZW1vaXplZENsb25lU25hcHNob3QiLCJpbnZhbGlkYXRlTWVtb2l6ZWRTbmFwc2hvdCIsIl9zdG9yZSRnZXRTdGF0ZSRwcmV2aSIsIlN0cmluZyIsInNuYXBzaG90IiwiYmF0Y2giLCJyZWNvaWxTdGF0ZSIsIm5ld1ZhbHVlT3JVcGRhdGVyIiwiX2JhdGNoIiwiUmVjb2lsX1NuYXBzaG90IiwiZnJlc2hTbmFwc2hvdCIsImluaXRpYWxpemVTdGF0ZSIsImNsb25lU25hcHNob3QiLCJSZWNvaWxfU25hcHNob3RfMSIsIlJlY29pbF9TbmFwc2hvdF8yIiwiUmVjb2lsX1NuYXBzaG90XzMiLCJSZWNvaWxfU25hcHNob3RfNCIsIlJlY29pbF9TbmFwc2hvdCQxIiwiUmVjb2lsX3VuaW9uU2V0cyIsInNldHMiLCJ1c2VSZWYiLCJSZWNvaWxfdXNlUmVmSW5pdE9uY2UiLCJpbml0aWFsVmFsdWUiLCJyZWYiLCJnZXROZXh0VHJlZVN0YXRlVmVyc2lvbiQzIiwibWFrZUVtcHR5U3RvcmVTdGF0ZSQyIiwiY2xlYW5VcE5vZGUkMiIsImdldERvd25zdHJlYW1Ob2RlcyQyIiwiaW5pdGlhbGl6ZU5vZGUkMiIsInNldE5vZGVWYWx1ZSQyIiwic2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVfREVQUkVDQVRFRCQxIiwiZ3JhcGgkMiIsImNsb25lR3JhcGgkMSIsImdldE5leHRTdG9yZUlEJDIiLCJjcmVhdGVNdXRhYmxlU291cmNlJDEiLCJyZWFjdE1vZGUkMiIsImFwcGx5QXRvbVZhbHVlV3JpdGVzJDEiLCJyZWxlYXNlU2NoZWR1bGVkUmV0YWluYWJsZXNOb3ckMSIsImZyZXNoU25hcHNob3QkMSIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYkMSIsInVzZVN0YXRlIiwibm90SW5BQ29udGV4dCIsImRlZmF1bHRTdG9yZSIsInN0YXRlUmVwbGFjZXJJc0JlaW5nRXhlY3V0ZWQiLCJzdGFydE5leHRUcmVlSWZOZWVkZWQiLCJBcHBDb250ZXh0IiwidXNlU3RvcmVSZWYiLCJNdXRhYmxlU291cmNlQ29udGV4dCIsIm5vdGlmeUNvbXBvbmVudHMiLCJkZXBlbmRlbnROb2RlcyIsImNvbXBzIiwiX3N1YklEIiwiX2RlYnVnTmFtZSIsInNlbmRFbmRPZkJhdGNoTm90aWZpY2F0aW9ucyIsInN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb24iLCJjYiIsInNwbGljZSIsIkJhdGNoZXIiLCJzZXROb3RpZnlCYXRjaGVyT2ZDaGFuZ2UiLCJzdG9yZVJlZiIsInNldFN0YXRlIiwiZW5kQmF0Y2giLCJuZXh0SUQiLCJSZWNvaWxSb290X0lOVEVSTkFMIiwiaW5pdGlhbGl6ZVN0YXRlX0RFUFJFQ0FURUQiLCJzdG9yZV9JTlRFUk5BTCIsInN0b3JlUHJvcCIsInN0b3JlU3RhdGVSZWYiLCJpZCIsIm1ldGFkYXRhIiwicmVwbGFjZWQiLCJub3RpZnlCYXRjaGVyT2ZDaGFuZ2UiLCJpbml0aWFsIiwiYXRvbSIsIndyaXR0ZW5Ob2RlcyIsInNldFVudmFsaWRhdGVkQXRvbVZhbHVlcyIsImluaXRpYWxTdG9yZVN0YXRlX0RFUFJFQ0FURUQiLCJpbml0aWFsU3RvcmVTdGF0ZSIsIm11dGFibGVTb3VyY2UiLCJhdG9tS2V5IiwiUHJvdmlkZXIiLCJSZWNvaWxfUmVjb2lsUm9vdCIsIlJlY29pbFJvb3QiLCJwcm9wcyIsIm92ZXJyaWRlIiwicHJvcHNFeGNlcHRPdmVycmlkZSIsImFuY2VzdG9yU3RvcmVSZWYiLCJ1c2VSZWNvaWxNdXRhYmxlU291cmNlIiwidXNlUmVjb2lsU3RvcmVJRCIsIm5vdGlmeUNvbXBvbmVudHNfRk9SX1RFU1RJTkciLCJzZW5kRW5kT2ZCYXRjaE5vdGlmaWNhdGlvbnNfRk9SX1RFU1RJTkciLCJ1c2VFZmZlY3QkMSIsInVzZVJlZiQyIiwiUmVjb2lsX3VzZVByZXZpb3VzIiwidXNlU3RvcmVSZWYkMSIsIlNVU1BFTlNFX1RJTUVPVVRfTVMkMSIsInVwZGF0ZVJldGFpbkNvdW50JDIiLCJSZXRlbnRpb25ab25lJDMiLCJ1c2VFZmZlY3QkMiIsInVzZVJlZiQzIiwiaXNTU1IkMiIsIlJlY29pbF91c2VSZXRhaW4iLCJ0b1JldGFpbiIsImEiLCJ0aW1lb3V0SUQiLCJjbGVhclRpbWVvdXQiLCJwcmV2aW91c1JldGFpbmFibGVzIiwiYiIsImwiLCJSZWNvaWxfc2hhbGxvd0FycmF5RXF1YWwiLCJ1c2VSZXRhaW5fQUNUVUFMIiwidXNlUmVmJDQiLCJSZWNvaWxfdXNlQ29tcG9uZW50TmFtZSIsImJhdGNoVXBkYXRlcyQyIiwiREVGQVVMVF9WQUxVRSQyIiwicmVhY3RNb2RlJDMiLCJ1c2VNdXRhYmxlU291cmNlJDEiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxIiwidXNlUmVjb2lsTXV0YWJsZVNvdXJjZSQxIiwidXNlU3RvcmVSZWYkMiIsImlzUmVjb2lsVmFsdWUkMiIsIkFic3RyYWN0UmVjb2lsVmFsdWUkMyIsImdldFJlY29pbFZhbHVlQXNMb2FkYWJsZSQyIiwic2V0UmVjb2lsVmFsdWUkMiIsInNldFVudmFsaWRhdGVkUmVjb2lsVmFsdWUkMiIsInN1YnNjcmliZVRvUmVjb2lsVmFsdWUkMSIsInVzZUNhbGxiYWNrJDEiLCJ1c2VFZmZlY3QkMyIsInVzZU1lbW8kMSIsInVzZVJlZiQ1IiwidXNlU3RhdGUkMSIsInNldEJ5QWRkaW5nVG9TZXQkMiIsImhhbmRsZUxvYWRhYmxlIiwidXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9TWU5DX0VYVEVSTkFMX1NUT1JFIiwiY29tcG9uZW50TmFtZSIsImdldFNuYXBzaG90IiwibWVtb2l6ZVByZXZpb3VzU25hcHNob3QiLCJwcmV2U3RhdGUiLCJfcHJldlN0YXRlIiwiX3ByZXZTdGF0ZTIiLCJuZXh0U3RhdGUiLCJnZXRNZW1vaXplZFNuYXBzaG90Iiwic3Vic2NyaWJlIiwibm90aWZ5IiwidXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9NVVRBQkxFX1NPVVJDRSIsIl9zdG9yZVN0YXRlJG5leHRUcmVlMyIsImdldExvYWRhYmxlV2l0aFRlc3RpbmciLCJfc3RvcmVTdGF0ZSIsIm5ld0xvYWRhYmxlIiwicHJldkxvYWRhYmxlUmVmIiwic291cmNlIiwidXNlUmVjb2lsVmFsdWVMb2FkYWJsZV9UUkFOU0lUSU9OX1NVUFBPUlQiLCJfc3RvcmVTdGF0ZSRuZXh0VHJlZTQiLCJ1cGRhdGVTdGF0ZSIsIl9zdGF0ZSIsInVzZVJlY29pbFZhbHVlTG9hZGFibGVfTEVHQUNZIiwiZm9yY2VVcGRhdGUiLCJfc3RvcmVTdGF0ZSRuZXh0VHJlZTUiLCJfcHJldkxvYWRhYmxlUmVmJGN1cnIiLCJfcHJldkxvYWRhYmxlUmVmJGN1cnIyIiwidXNlUmVjb2lsVmFsdWVMb2FkYWJsZSIsIlRSQU5TSVRJT05fU1VQUE9SVCIsIlNZTkNfRVhURVJOQUxfU1RPUkUiLCJNVVRBQkxFX1NPVVJDRSIsIkxFR0FDWSIsInVzZVJlY29pbFZhbHVlIiwidXNlU2V0UmVjb2lsU3RhdGUiLCJ1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRSIsInVzZVJlY29pbFZhbHVlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRSIsIlJlY29pbF9Ib29rcyIsInJlY29pbENvbXBvbmVudEdldFJlY29pbFZhbHVlQ291bnRfRk9SX1RFU1RJTkciLCJ1c2VSZWNvaWxJbnRlcmZhY2UiLCJyZWNvaWxWYWx1ZXNVc2VkIiwicHJldmlvdXNTdWJzY3JpcHRpb25zIiwidW5zdWJzY3JpYmVGcm9tIiwic3ViIiwiY3VycmVudFN1YnNjcmlwdGlvbnMiLCJnZXRSZWNvaWxWYWx1ZSIsImdldFJlY29pbFZhbHVlTG9hZGFibGUiLCJnZXRSZWNvaWxTdGF0ZSIsImdldFJlY29pbFN0YXRlTG9hZGFibGUiLCJnZXRTZXRSZWNvaWxTdGF0ZSIsImdldFJlc2V0UmVjb2lsU3RhdGUiLCJ1c2VSZWNvaWxTdGF0ZSIsInVzZVJlY29pbFN0YXRlTG9hZGFibGUiLCJ1c2VSZXNldFJlY29pbFN0YXRlIiwidXNlU2V0VW52YWxpZGF0ZWRBdG9tVmFsdWVzIiwidXNlUmVjb2lsU3RhdGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFIiwiYmF0Y2hVcGRhdGVzJDMiLCJERUZBVUxUX1ZBTFVFJDMiLCJnZXROb2RlJDQiLCJub2RlcyQxIiwidXNlU3RvcmVSZWYkMyIsIkFic3RyYWN0UmVjb2lsVmFsdWUkNCIsInNldFJlY29pbFZhbHVlTG9hZGFibGUkMSIsIlNVU1BFTlNFX1RJTUVPVVRfTVMkMiIsImNsb25lU25hcHNob3QkMSIsInVzZUNhbGxiYWNrJDIiLCJ1c2VFZmZlY3QkNCIsInVzZVJlZiQ2IiwidXNlU3RhdGUkMiIsImlzU1NSJDMiLCJ1c2VUcmFuc2FjdGlvblN1YnNjcmlwdGlvbiIsImV4dGVybmFsbHlWaXNpYmxlQXRvbVZhbHVlc0luU3RhdGUiLCJwZXJzaXN0ZWRBdG9tQ29udGVudHNWYWx1ZXMiLCJSZWNvaWxfZmlsdGVyTWFwIiwicGVyc2lzdGVuY2UiLCJwZXJzaXN0ZW5jZV9VTlNUQUJMRSIsIm1hcHMiLCJuZXh0S2V5IiwiUmVjb2lsX21lcmdlTWFwcyIsImdvdG9TbmFwc2hvdCIsInByZXYiLCJrZXlzVG9VcGRhdGUiLCJfcHJldiRhdG9tVmFsdWVzJGdldCIsIl9uZXh0JGF0b21WYWx1ZXMkZ2V0Iiwic2hvdWxkUmVzdG9yZUZyb21TbmFwc2hvdHMiLCJSZWNvaWxfU25hcHNob3RIb29rcyIsInVzZVJlY29pbFNuYXBzaG90Iiwic2V0U25hcHNob3QiLCJwcmV2aW91c1NuYXBzaG90IiwicmVsZWFzZVJlZiIsIl9yZWxlYXNlUmVmJGN1cnJlbnQyIiwiX3JlbGVhc2VSZWYkY3VycmVudCIsIl9yZWxlYXNlUmVmJGN1cnJlbnQzIiwidXNlR290b1JlY29pbFNuYXBzaG90IiwidXNlUmVjb2lsVHJhbnNhY3Rpb25PYnNlcnZlciIsInVzZVRyYW5zYWN0aW9uT2JzZXJ2YXRpb25fREVQUkVDQVRFRCIsInByZXZpb3VzQXRvbVZhbHVlcyIsImF0b21JbmZvIiwiX25vZGUkcGVyc2lzdGVuY2VfVU5TIiwiX25vZGUkcGVyc2lzdGVuY2VfVU5TMiIsIl9ub2RlJHBlcnNpc3RlbmNlX1VOUzMiLCJfbm9kZSRwZXJzaXN0ZW5jZV9VTlM0IiwiYmFja0J1dHRvbiIsIm1vZGlmaWVkQXRvbXMiLCJSZWNvaWxfZmlsdGVyU2V0IiwidXNlVHJhbnNhY3Rpb25TdWJzY3JpcHRpb25fREVQUkVDQVRFRCIsInBlZWtOb2RlSW5mbyQyIiwidXNlU3RvcmVSZWYkNCIsInJlYWN0TW9kZSQ0IiwiUmVjb2lsUm9vdCQxIiwidXNlU3RvcmVSZWYkNSIsInVzZU1lbW8kMiIsImxvYWRhYmxlV2l0aFZhbHVlJDEiLCJpbml0aWFsaXplTm9kZSQzIiwiREVGQVVMVF9WQUxVRSQ0IiwiZ2V0Tm9kZSQ1IiwiY29weVRyZWVTdGF0ZSQxIiwiZ2V0UmVjb2lsVmFsdWVBc0xvYWRhYmxlJDMiLCJpbnZhbGlkYXRlRG93bnN0cmVhbXMkMSIsIndyaXRlTG9hZGFibGVUb1RyZWVTdGF0ZSQxIiwiaXNBdG9tIiwiVHJhbnNhY3Rpb25JbnRlcmZhY2VJbXBsIiwiX2NoYW5nZXMiLCJfdHJlZVN0YXRlIiwibmV3VHJlZVN0YXRlX0lOVEVSTkFMIiwiUmVjb2lsX0F0b21pY1VwZGF0ZXNfMSIsImNoYW5nZXNldCIsIlJlY29pbF9BdG9taWNVcGRhdGVzJDEiLCJhdG9taWNVcGRhdGVyIiwiUmVjb2lsX2ludmFyaWFudCIsImNvbmRpdGlvbiIsImF0b21pY1VwZGF0ZXIkMSIsImJhdGNoVXBkYXRlcyQ0IiwiREVGQVVMVF9WQUxVRSQ1IiwidXNlU3RvcmVSZWYkNiIsInJlZnJlc2hSZWNvaWxWYWx1ZSQxIiwic2V0UmVjb2lsVmFsdWUkMyIsIlNuYXBzaG90JDEiLCJjbG9uZVNuYXBzaG90JDIiLCJnb3RvU25hcHNob3QkMSIsInVzZUNhbGxiYWNrJDMiLCJTZW50aW5lbCIsIlNFTlRJTkVMIiwicmVjb2lsQ2FsbGJhY2siLCJleHRyYUludGVyZmFjZSIsImVyck1zZyIsImNhbGxiYWNrSW50ZXJmYWNlIiwicmVzZXQiLCJyZWZyZXNoIiwidHJhbnNhY3RfVU5TVEFCTEUiLCJ0cmFuc2FjdGlvbiIsIlJlY29pbF91c2VSZWNvaWxDYWxsYmFjayIsInVzZVJlY29pbENhbGxiYWNrIiwidXNlU3RvcmVSZWYkNyIsInJlZnJlc2hSZWNvaWxWYWx1ZSQyIiwidXNlQ2FsbGJhY2skNCIsImF0b21pY1VwZGF0ZXIkMiIsInVzZVN0b3JlUmVmJDgiLCJ1c2VNZW1vJDMiLCJmaW5kTGVhZiIsImdldE5vZGVWYWx1ZSIsImhhbmRsZXJzIiwiX2hhbmRsZXJzJG9uTm9kZVZpc2l0Iiwib25Ob2RlVmlzaXQiLCJub2RlVmFsdWUiLCJicmFuY2hlcyIsImFkZExlYWYiLCJyb3V0ZSIsImJyYW5jaEtleSIsIm9uQWJvcnQiLCJfaGFuZGxlcnMkb25Ob2RlVmlzaXQyIiwicGF0aCIsInBydW5lVXBzdHJlYW1CcmFuY2hlcyIsImJyYW5jaE5vZGUiLCJjb3VudERvd25zdHJlYW1MZWF2ZXMiLCJzdW0iLCJjdXJyTm9kZSIsIlJlY29pbF9UcmVlQ2FjaGUkMSIsIlRyZWVDYWNoZSIsIm9wdGlvbnMiLCJfb3B0aW9ucyRvbkhpdCIsIl9vcHRpb25zJG9uU2V0IiwiX29wdGlvbnMkbWFwTm9kZVZhbHVlIiwiX251bUxlYWZzIiwiX29uSGl0Iiwib25IaXQiLCJfb25TZXQiLCJvblNldCIsIl9tYXBOb2RlVmFsdWUiLCJtYXBOb2RlVmFsdWUiLCJfdGhpcyRnZXRMZWFmTm9kZSIsImdldExlYWZOb2RlIiwibGVhZk5vZGUiLCJzZXRSZXRyeWFibGVQYXJ0IiwicHJ1bmVOb2RlRnJvbVRyZWUiLCJSZWNvaWxfTFJVQ2FjaGUkMSIsIkxSVUNhY2hlIiwiX29wdGlvbnMkbWFwS2V5IiwiX21heFNpemUiLCJtYXhTaXplIiwiX2hlYWQiLCJfdGFpbCIsIl9rZXlNYXBwZXIiLCJtYXBLZXkiLCJoZWFkIiwidGFpbCIsIm1hcHBlZEtleSIsInJpZ2h0IiwibGVmdCIsIl9tYXliZURlbGV0ZUxSVSIsImRlbGV0ZUxydSIsIkxSVUNhY2hlJDEiLCJUcmVlQ2FjaGUkMSIsIlJlY29pbF90cmVlQ2FjaGVMUlUiLCJscnVDYWNoZSIsImxydU5vZGUiLCJzdHJpbmdpZnkiLCJpbmNsdWRlcyIsIkpTT04iLCJhbGxvd0Z1bmN0aW9ucyIsIl9KU09OJHN0cmluZ2lmeSIsInRvU3RyaW5nIiwidG9KU09OIiwic29ydCIsImxvY2FsZUNvbXBhcmUiLCJmaWx0ZXIiLCJqb2luIiwiUmVjb2lsX3N0YWJsZVN0cmluZ2lmeSIsIlRyZWVDYWNoZSQyIiwiZGVmYXVsdFBvbGljeSIsImVxdWFsaXR5IiwiZXZpY3Rpb24iLCJJbmZpbml0eSIsImlzUmVhY3ROYXRpdmUkMSIsImlzU1NSJDQiLCJsb2FkYWJsZVdpdGhFcnJvciQxIiwibG9hZGFibGVXaXRoUHJvbWlzZSQxIiwibG9hZGFibGVXaXRoVmFsdWUkMiIsImdldE5vZGVMb2FkYWJsZSQyIiwicGVla05vZGVMb2FkYWJsZSQxIiwic2V0Tm9kZVZhbHVlJDMiLCJzYXZlRGVwZW5kZW5jeU1hcFRvU3RvcmUkMSIsIkRFRkFVTFRfVkFMVUUkNiIsIlJlY29pbFZhbHVlTm90UmVhZHkkMiIsImdldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQxIiwiZ2V0Tm9kZSQ2IiwicmVnaXN0ZXJOb2RlJDEiLCJpc1JlY29pbFZhbHVlJDMiLCJtYXJrUmVjb2lsVmFsdWVNb2RpZmllZCQxIiwicmV0YWluZWRCeU9wdGlvbldpdGhEZWZhdWx0JDEiLCJyZWNvaWxDYWxsYmFjayQxIiwic3RhcnRQZXJmQmxvY2siLCJzdGFydFBlcmZCbG9jayQxIiwiX2lkIiwiQ2FuY2VsZWQiLCJDQU5DRUxFRCIsImRlcGVuZGVuY3lTdGFjayIsIndhaXRpbmdTdG9yZXMiLCJnZXROZXdFeGVjdXRpb25JZCIsImV4ZWN1dGlvbklkIiwiUmVjb2lsX3NlbGVjdG9yIiwiY2FjaGVQb2xpY3lfVU5TVEFCTEUiLCJjYWNoZVBvbGljeSIsImRpc2NvdmVyZWREZXBlbmRlbmN5Tm9kZUtleXMiLCJ2YWx1ZU1hcHBlciIsImdldFZhbHVlTWFwcGVyIiwidHJlZUNhY2hlIiwiZ2V0VHJlZUNhY2hlIiwiUmVjb2lsX3RyZWVDYWNoZUZyb21Qb2xpY3kiLCJyZXRhaW5lZEJ5X1VOU1RBQkxFIiwiZXhlY3V0aW9uSW5mb01hcCIsImxpdmVTdG9yZXNDb3VudCIsInNlbGVjdG9ySXNMaXZlIiwic2VsZWN0b3JJbml0Iiwic2VsZWN0b3JTaG91bGREZWxldGVDb25maWdPblJlbGVhc2UiLCJyZXNvbHZlQXN5bmMiLCJkZXBWYWx1ZXMiLCJzZXRDYWNoZSIsInNldERlcHNJblN0b3JlIiwibm90aWZ5U3RvcmVzT2ZSZXNvbHZlZEFzeW5jIiwiaXNMYXRlc3RFeGVjdXRpb24iLCJjbGVhckV4ZWN1dGlvbkluZm8iLCJzdG9yZXMiLCJ3YWl0aW5nU3RvcmUiLCJtYXJrU3RvcmVXYWl0aW5nRm9yUmVzb2x2ZWRBc3luYyIsImdldENhY2hlZE5vZGVMb2FkYWJsZSIsImlzS2V5UG9pbnRpbmdUb1NlbGVjdG9yIiwid3JhcFBlbmRpbmdEZXBlbmRlbmN5UHJvbWlzZSIsImV4aXN0aW5nRGVwcyIsImxvYWRpbmdEZXBzU3RhdGUiLCJyZXNvbHZlZERlcCIsImxvYWRpbmdEZXBLZXkiLCJsb2FkaW5nRGVwUHJvbWlzZSIsImNhY2hlZExvYWRhYmxlIiwiZ2V0VmFsRnJvbUNhY2hlQW5kVXBkYXRlZERvd25zdHJlYW1EZXBzIiwiZ2V0RXhlY3V0aW9uSW5mbyIsImV4ZWN1dGlvbkluZm8iLCJnZXRFeGVjdXRpb25JbmZvT2ZJblByb2dyZXNzRXhlY3V0aW9uIiwibGF0ZXN0TG9hZGFibGUiLCJldmFsdWF0ZVNlbGVjdG9yR2V0dGVyIiwidXBkYXRlRXhlY3V0aW9uSW5mb0RlcFZhbHVlcyIsIl9zdG9yZSRnZXRTdGF0ZSIsIl9zdG9yZSRnZXRTdGF0ZSRjdXJyZSIsIl9zdG9yZSRnZXRTdGF0ZTIiLCJfc3RvcmUkZ2V0U3RhdGUyJG5leHQiLCJfc3RvcmUkZ2V0U3RhdGUkbmV4dFQiLCJfc3RvcmUkZ2V0U3RhdGUzIiwiX3N0b3JlJGdldFN0YXRlMyRuZXh0IiwiZW5kUGVyZkJsb2NrIiwiZ2F0ZUNhbGxiYWNrIiwiZmluaXNoRXZhbHVhdGlvbiIsInJlc3VsdElzRXJyb3IiLCJkZXBLZXkiLCJuZXdEZXBLZXkiLCJzZXROZXdEZXBJblN0b3JlIiwiZGVwTG9hZGFibGUiLCJnZXRDYWxsYmFjayIsImVycm9yT3JQcm9taXNlIiwid3JhcFBlbmRpbmdQcm9taXNlIiwiZmluYWxseSIsImVycm9yT3JEZXBQcm9taXNlIiwiZGVwc0FmdGVyQ2FjaGVEb25lIiwiY2FjaGVkVmFsIiwibGF0ZXN0RXhlY3V0aW9uSWQiLCJfQXJyYXkkZnJvbSRmaW5kIiwiZXhlY0luZm8iLCJfZXhlY3V0aW9uSW5mbyRkZXBWYWwiLCJfbWFwT2ZDaGVja2VkVmVyc2lvbnMiLCJvbGREZXBWYWx1ZXMiLCJkZXBWYWx1ZXNEaXNjb3ZlcmVkU29GYXJEdXJpbmdBc3luY1dvcmsiLCJjYWNoZWREZXBWYWx1ZXNDaGVja2VkRm9yVGhpc1ZlcnNpb24iLCJtYXBPZkNoZWNrZWRWZXJzaW9ucyIsImlzQ2FjaGVkVmVyc2lvblNhbWUiLCJub2RlVmFsIiwic3RhdGVWZXJzaW9uIiwib2xkVmFsIiwiaGF2ZUFzeW5jRGVwc0NoYW5nZWQiLCJfZ2V0RXhlY3V0aW9uSW5mbyIsInZhbExvYWRhYmxlIiwiZGVwVmFsdWVzVG9EZXBSb3V0ZSIsInNlbGVjdG9yUGVlayIsIl9wZWVrTm9kZUxvYWRhYmxlIiwic2VsZWN0b3JHZXQiLCJzbGljZSIsImluZGV4T2YiLCJpblByb2dyZXNzRXhlY3V0aW9uSW5mbyIsIl9pblByb2dyZXNzRXhlY3V0aW9uSSIsIm5ld0V4ZWN1dGlvbklkIiwibmV3RGVwVmFsdWVzIiwic2V0RXhlY3V0aW9uSW5mbyIsImdldFZhbEZyb21SdW5uaW5nTmV3RXhlY3V0aW9uQW5kVXBkYXRlZERlcHMiLCJnZXRTZWxlY3RvclZhbEFuZFVwZGF0ZWREZXBzIiwiZGV0ZWN0Q2lyY3VsYXJEZXBlbmRlbmNpZXMiLCJpbnZhbGlkYXRlU2VsZWN0b3IiLCJjbGVhclNlbGVjdG9yQ2FjaGUiLCJzeW5jU2VsZWN0b3JTZXRGaW5pc2hlZCIsInNldFJlY29pbFN0YXRlIiwic2V0VmFsdWUiLCJkYW5nZXJvdXNseUFsbG93TXV0YWJpbGl0eSIsImxvYWRhYmxlV2l0aEVycm9yJDIiLCJsb2FkYWJsZVdpdGhQcm9taXNlJDIiLCJsb2FkYWJsZVdpdGhWYWx1ZSQzIiwicGVla05vZGVJbmZvJDMiLCJERUZBVUxUX1ZBTFVFJDciLCJEZWZhdWx0VmFsdWUkMiIsImdldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQyIiwicmVnaXN0ZXJOb2RlJDIiLCJzZXRDb25maWdEZWxldGlvbkhhbmRsZXIkMSIsImlzUmVjb2lsVmFsdWUkNCIsImdldFJlY29pbFZhbHVlQXNMb2FkYWJsZSQ0IiwibWFya1JlY29pbFZhbHVlTW9kaWZpZWQkMiIsInNldFJlY29pbFZhbHVlJDQiLCJzZXRSZWNvaWxWYWx1ZUxvYWRhYmxlJDIiLCJyZXRhaW5lZEJ5T3B0aW9uV2l0aERlZmF1bHQkMiIsIlJlY29pbF9hdG9tIiwiZGVmYXVsdCIsIm9wdGlvbnNEZWZhdWx0IiwicmVzdE9wdGlvbnMiLCJ2YWxpZGF0b3IiLCJzdG9yZWRWYWx1ZSIsImVmZmVjdHMiLCJlZmZlY3RzX1VOU1RBQkxFIiwic2VsIiwiYmFzZVZhbHVlIiwiYXRvbVdpdGhGYWxsYmFjayIsImNhY2hlZEFuc3dlckZvclVudmFsaWRhdGVkVmFsdWUiLCJkZWZhdWx0TG9hZGFibGUiLCJjbGVhbnVwRWZmZWN0c0J5U3RvcmUiLCJwZWVrQXRvbSIsIl9yZWYiLCJfc3RhdGUkYXRvbVZhbHVlcyRnZXQzIiwibm9udmFsaWRhdGVkVmFsdWUiLCJ2YWxpZGF0b3JSZXN1bHQiLCJ2YWxpZGF0ZWRWYWx1ZUxvYWRhYmxlIiwiaW5pdFN0YXRlIiwiX29wdGlvbnMkZWZmZWN0cyIsIm5vdGlmeURlZmF1bHRTdWJzY3JpYmVycyIsIl9zdG9yZSRnZXRTdGF0ZSRuZXh0VDMiLCJkdXJpbmdJbml0IiwiaW5pdFZhbHVlIiwiaXNJbml0RXJyb3IiLCJwZW5kaW5nU2V0U2VsZiIsInJldFZhbHVlIiwiZ2V0UHJvbWlzZSIsImdldEluZm9fVU5TVEFCTEUiLCJfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ0IiwiaW5mbyIsInNldFNlbGYiLCJlZmZlY3QiLCJjdXJyZW50TG9hZGFibGUiLCJjdXJyZW50VmFsdWUiLCJyZXNldFNlbGYiLCJoYW5kbGVyIiwiX2NsZWFudXBFZmZlY3RzQnlTdG9yMiIsImN1cnJlbnRTdG9yZSIsIl9jdXJyZW50VHJlZSRhdG9tVmFsdSIsIl9wcmV2aW91c1RyZWUkYXRvbVZhbCIsIl9wZW5kaW5nU2V0U2VsZiIsIl9wZW5kaW5nU2V0U2VsZjIiLCJfcGVuZGluZ1NldFNlbGYzIiwib2xkTG9hZGFibGUiLCJvbGRWYWx1ZSIsIl9jbGVhbnVwRWZmZWN0c0J5U3RvcjMiLCJfc3RvcmUkZ2V0U3RhdGUkbmV4dFQ1IiwiZnJvemVuSW5pdFZhbHVlIiwiaW5pdExvYWRhYmxlIiwid3JhcHBlZFByb21pc2UiLCJfc3RhdGUkYXRvbVZhbHVlcyRnZXQiLCJfc3RvcmUkZ2V0U3RhdGUkbmV4dFQyIiwiX3N0YXRlJGF0b21WYWx1ZXMkZ2V0MiIsIl9jbGVhbnVwRWZmZWN0c0J5U3RvciIsImJhc2VBdG9tIiwiUmVjb2lsX01hcENhY2hlJDEiLCJNYXBDYWNoZSIsIkxSVUNhY2hlJDIiLCJNYXBDYWNoZSQxIiwiZGVmYXVsdFBvbGljeSQxIiwiUmVjb2lsX2NhY2hlRnJvbVBvbGljeSIsImdldFZhbHVlTWFwcGVyJDEiLCJnZXRDYWNoZSIsInNldENvbmZpZ0RlbGV0aW9uSGFuZGxlciQyIiwic2V0Q29uZmlnRGVsZXRpb25IYW5kbGVyJDMiLCJuZXh0SW5kZXgiLCJSZWNvaWxfc2VsZWN0b3JGYW1pbHkiLCJfb3B0aW9ucyRjYWNoZVBvbGljeUYiLCJfb3B0aW9ucyRjYWNoZVBvbGljeUYyIiwic2VsZWN0b3JDYWNoZSIsImNhY2hlUG9saWN5Rm9yUGFyYW1zX1VOU1RBQkxFIiwicGFyYW1zIiwiX3N0YWJsZVN0cmluZ2lmeSIsImNhY2hlZFNlbGVjdG9yIiwibXlLZXkiLCJteUdldCIsImNhbGxiYWNrcyIsIm15Q2FjaGVQb2xpY3kiLCJuZXdTZWxlY3RvciIsImNvbnN0YW50U2VsZWN0b3IiLCJ0aHJvd2luZ1NlbGVjdG9yIiwibG9hZGFibGVXaXRoRXJyb3IkMyIsImxvYWRhYmxlV2l0aFByb21pc2UkMyIsImxvYWRhYmxlV2l0aFZhbHVlJDQiLCJjb25jdXJyZW50UmVxdWVzdHMiLCJyZXN1bHRzIiwiZmlsbCIsImV4Y2VwdGlvbnMiLCJpc0Vycm9yIiwiZXhwIiwidW53cmFwRGVwZW5kZW5jaWVzIiwiZGVwZW5kZW5jaWVzIiwid3JhcFJlc3VsdHMiLCJ3cmFwTG9hZGFibGVzIiwiZXhjZXB0aW9uIiwiUmVjb2lsX1dhaXRGb3IiLCJ3YWl0Rm9yTm9uZSIsIndhaXRGb3JBbnkiLCJ3YWl0Rm9yQWxsIiwiZXhjZXB0aW9uUmVzdWx0cyIsInN5bmNSZXN1bHRzIiwid2FpdEZvckFsbFNldHRsZWQiLCJub1dhaXQiLCJkZXBlbmRlbmN5IiwiRGVmYXVsdFZhbHVlJDMiLCJSZWNvaWxSb290JDIiLCJ1c2VSZWNvaWxTdG9yZUlEJDEiLCJpc1JlY29pbFZhbHVlJDUiLCJyZXRlbnRpb25ab25lJDEiLCJmcmVzaFNuYXBzaG90JDIiLCJ1c2VSZWNvaWxTdGF0ZSQxIiwidXNlUmVjb2lsU3RhdGVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFJDEiLCJ1c2VSZWNvaWxTdGF0ZUxvYWRhYmxlJDEiLCJ1c2VSZWNvaWxWYWx1ZSQxIiwidXNlUmVjb2lsVmFsdWVfVFJBTlNJVElPTl9TVVBQT1JUX1VOU1RBQkxFJDEiLCJ1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlJDEiLCJ1c2VSZWNvaWxWYWx1ZUxvYWRhYmxlX1RSQU5TSVRJT05fU1VQUE9SVF9VTlNUQUJMRSQxIiwidXNlUmVzZXRSZWNvaWxTdGF0ZSQxIiwidXNlU2V0UmVjb2lsU3RhdGUkMSIsInVzZUdvdG9SZWNvaWxTbmFwc2hvdCQxIiwidXNlUmVjb2lsU25hcHNob3QkMSIsInVzZVJlY29pbFRyYW5zYWN0aW9uT2JzZXJ2ZXIkMSIsInVzZVJlY29pbENhbGxiYWNrJDEiLCJub1dhaXQkMSIsIndhaXRGb3JBbGwkMSIsIndhaXRGb3JBbGxTZXR0bGVkJDEiLCJ3YWl0Rm9yQW55JDEiLCJ3YWl0Rm9yTm9uZSQxIiwiUmVjb2lsX2luZGV4IiwidXNlUmVjb2lsQnJpZGdlQWNyb3NzUmVhY3RSb290c19VTlNUQUJMRSIsInNlbGVjdG9yIiwiYXRvbUZhbWlseSIsImF0b21DYWNoZSIsImNhY2hlZEF0b20iLCJhdG9tT3B0aW9ucyIsIm5ld0F0b20iLCJzZWxlY3RvckZhbWlseSIsImNvbnN0U2VsZWN0b3IiLCJlcnJvclNlbGVjdG9yIiwicmVhZE9ubHlTZWxlY3RvciIsInVzZUdldFJlY29pbFZhbHVlSW5mb19VTlNUQUJMRSIsInVzZVJlY29pbFJlZnJlc2hlcl9VTlNUQUJMRSIsInVzZVJlY29pbFRyYW5zYWN0aW9uX1VOU1RBQkxFIiwiYXRvbWljVXBkYXRlIiwidHJhbnNhY3Rpb25JbnRlcmZhY2UiLCJ1c2VSZWNvaWxUcmFuc2FjdGlvbk9ic2VydmVyX1VOU1RBQkxFIiwic25hcHNob3RfVU5TVEFCTEUiLCJ1c2VSZXRhaW4iLCJSZWNvaWxfaW5kZXhfMSIsIlJlY29pbF9pbmRleF8yIiwiUmVjb2lsX2luZGV4XzMiLCJSZWNvaWxfaW5kZXhfNCIsIlJlY29pbF9pbmRleF81IiwiUmVjb2lsX2luZGV4XzYiLCJSZWNvaWxfaW5kZXhfNyIsIlJlY29pbF9pbmRleF84IiwiUmVjb2lsX2luZGV4XzkiLCJSZWNvaWxfaW5kZXhfMTAiLCJSZWNvaWxfaW5kZXhfMTEiLCJSZWNvaWxfaW5kZXhfMTIiLCJSZWNvaWxfaW5kZXhfMTMiLCJSZWNvaWxfaW5kZXhfMTQiLCJSZWNvaWxfaW5kZXhfMTUiLCJSZWNvaWxfaW5kZXhfMTYiLCJSZWNvaWxfaW5kZXhfMTciLCJSZWNvaWxfaW5kZXhfMTgiLCJSZWNvaWxfaW5kZXhfMTkiLCJSZWNvaWxfaW5kZXhfMjAiLCJSZWNvaWxfaW5kZXhfMjEiLCJSZWNvaWxfaW5kZXhfMjIiLCJSZWNvaWxfaW5kZXhfMjMiLCJSZWNvaWxfaW5kZXhfMjQiLCJSZWNvaWxfaW5kZXhfMjUiLCJSZWNvaWxfaW5kZXhfMjYiLCJSZWNvaWxfaW5kZXhfMjciLCJSZWNvaWxfaW5kZXhfMjgiLCJSZWNvaWxfaW5kZXhfMjkiLCJSZWNvaWxfaW5kZXhfMzAiLCJSZWNvaWxfaW5kZXhfMzEiLCJSZWNvaWxfaW5kZXhfMzIiLCJSZWNvaWxfaW5kZXhfMzMiLCJSZWNvaWxfaW5kZXhfMzQiLCJSZWNvaWxfaW5kZXhfMzUiLCJSZWNvaWxfaW5kZXhfMzYiLCJSZWNvaWxfaW5kZXhfMzciXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/server-data/resources/[phone]/npwd_crypto/web/dist/935.js b/server-data/resources/[phone]/npwd_crypto/web/dist/935.js deleted file mode 100644 index 0166bdab3..000000000 --- a/server-data/resources/[phone]/npwd_crypto/web/dist/935.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 935.js.LICENSE.txt */ -"use strict";(self.webpackChunknpwd_crypto=self.webpackChunknpwd_crypto||[]).push([[935],{7418:e=>{var n=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function l(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var n={},t=0;t<10;t++)n["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(n).map((function(e){return n[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,a){for(var o,u,i=l(e),s=1;s{var r=t(2950),l=t(7418),a=t(3840);function o(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t